【发布时间】:2012-11-26 19:46:31
【问题描述】:
为了使用带有智能指针的不完整类型,例如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的整个定义是否可能只存在一部分?
【问题讨论】: