我在标题中有一些代码,看起来像这样:
#include <memory>
class Thing;
class MyClass
{
std::unique_ptr< Thing > my_thing;
};
如果我在一个不包括Thing
类型定义的cpp中包含这个头,那么它不会在VS2010-SP1下编译:
1>C:\程序文件(x86)\微软 Visual Studio 10.0\VC\include\memory(2067):错误C2027:使用未定义的类型'Thing'
将std::unique_ptr
替换为std::shared_ptr
,它将被编译。
所以,我猜是当前VS2010 std::unique_ptr
的实现需要完整的定义,而且它完全依赖于实现。
真的是这样吗?它的标准要求中是否有一些东西使得std::unique_ptr
的实现不可能只使用前向声明?这感觉很奇怪,因为它应该只保存指向Thing
的指针,不是吗?