我有一个共享库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