我使用boost::scoped_ptr
并在头文件中预先声明:什么翻译单位持有隐含定义的特殊成员函数?
//Bar.h
class Foo;
class Bar;
{
private:
boost::scoped_ptr<Foo> _foo;
};
我没有实现我自己的析构函数,因为智能指针将做的工作。
我将这个头文件包含在多个翻译单元中,并不是所有的都包含Foo
定义。当试图编译时,我得到一个错误,scoped_ptr
正在删除一个指针,指向不完整类型Foo
。
如果我在Bar.h
中声明空的析构函数并在Bar.cpp
中实现它,一切都很容易修复。
但是,如果析构函数是在头文件中实现的,我得到了同样的错误。
所以问题是:在哪个翻译单元做隐式定义的方法去?
@DavidRodríguez-dribeas:谢谢,我选择了你的配方 – Andrew 2012-08-13 13:20:28
由于同样的原因,我编辑了最后一句话。还删除了对* default构造函数/析构函数*的引用。在C++中,默认构造函数是不带参数的构造函数,无论它是否被隐式定义。 – 2012-08-13 13:22:15
@DavidRodríguez-dribeas:是的,你说得对,谢谢 – Andrew 2012-08-13 13:23:54