模板方法在哪里实例化?

时间:2012-11-26 19:46:31

标签: c++ templates boost

为了使用带有智能指针(如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的整个定义可能存在吗?

1 个答案:

答案 0 :(得分:2)

我觉得我错过了你的问题。

在这个例子中只使用了一个正文(“.cpp”)文件,因此它就在那里。更确切地说,它与析构函数一样进入相同的目标文件(“。o”,“。obj”等)。语言标准没有指定这一点,但这就是我熟悉的所有实现的方式。