为了使用带有智能指针的不完整类型,例如boost::scoped_ptr
,必须在相应的 CPP 文件中为父类显式定义一个空析构函数。例子:
// H file
class Foo
{
public:
~Foo();
private:
class Pimpl;
boost::scoped_ptr<Pimpl> pimpl_;
};
// CPP file
class Foo::Pimpl {};
Foo::~Foo() {}
boost::scoped_ptr
编译器究竟将' 的析构函数的实例化放在哪里?我试图从视觉上想象它在这些源文件中的位置,就好像我自己明确定义了 scoped_ptr 的析构函数一样。以这种方式想象是否合理?
我知道模板方法和类在与该类型一起使用之前不会为该类型实例化,但我现在正试图从结构上考虑它,如果编译器实际上是手写的,它会将它放在哪里。这将帮助我更好地理解如何使用这些技术(如上面的技术)。
此外,我不确定模板类的整个定义是否被实例化,或者只是它的相关部分,因为它们被使用。换句话说,是否有可能只boost::scoped_ptr
存在 ' 的整个定义的一部分?