我在头文件中有一些代码如下:
#include <memory>
class Thing;
class MyClass
{
    std::unique_ptr< Thing > my_thing;
};
如果我有一个CPP这个头不包含的Thing类型定义,那么这并不在VS2010 SP1的编译:
1> C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\include\memory(2067):错误C2027:使用未定义类型'Thing'
替换std::unique_ptr为std::shared_ptr和编译.
所以,我猜这是当前VS2010 std::unique_ptr的实现,需要完整的定义,而且完全依赖于实现.
或者是吗?它的标准要求中是否有某些东西使得std::unique_ptr实施只能使用前向声明?感觉很奇怪,因为它应该只有一个指针Thing,不应该吗?
在C++中开发一个返回boost共享指针并将它们用作参数的DLL是否有效?
那么,导出这样的函数是否可以?
1.) boost::shared_ptr<Connection> startConnection();
2.) void sendToConnection(boost::shared_ptr<Connection> conn, byte* data, int len);
特别说明:引用计数是跨越DLL边界还是需要exe和dll使用相同的运行时?
目的是克服对象所有权的问题.所以当dll和exe都不再引用它时,对象会被删除.