我有一個共享庫lib.so
包含一個類Foo
。我正在動態加載(在UNIX上爲dlopen
)lib.so
。加載後,我想創建一個Foo
的實例。
我可以簡單地使用new
運營商創建一個Foo
的對象,或者我將不得不創建一個導出的工廠方法放在lib.so
將爲我創建該對象?是從共享庫中導出類的構造函數嗎?
其實問題是如果Foo
的構造函數被導出,並且它可以簡單地用new
運算符調用。我認爲UNIX上的共享庫中的所有類和方法都是默認導出的,我不必像在Windows上那樣顯式導出它們。
除了隱藏創建(並可能初始化)Foo
對象的方式,在創建共享庫中包含的類的對象時,還有其他什麼原因使用工廠方法嗎?
我相信GCC維護一個兼容的C++ API回到版本3.3.6。請參閱http://stackoverflow.com/questions/3718746/g-version-compatibility – 2010-09-23 13:42:49
@Zan:這不會改變問題:具有其他編譯器的用戶將無法導入使用gcc編譯的共享對象。 – 2010-09-23 13:47:54
你說過「*相同*編譯器的不同版本」,這就是我發表評論的原因。 – 2010-09-23 13:58:59