模板方法在哪里实例化

Where are template methods instantiated?

本文关键字:实例化 在哪里 模板方法      更新时间:2023-10-16

为了将不完整类型与智能指针(如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的析构函数实例化具体放在哪里?我试图直观地想象它在这两个源文件中的位置,就好像我自己明确定义了scope_ptr的析构函数一样。这样想合理吗?

我知道模板方法和类在与类型一起使用之前不会为该类型实例化,但我现在正在尝试从结构上考虑它,以及如果编译器真的手工编写了它,它会放在哪里。这将帮助我更好地理解如何使用这些技术(如上面的技术)。

此外,我不确定模板类的整个定义是实例化的,还是只实例化了其中的相关部分。换句话说,boost::scoped_ptr的整个定义是否可能只存在一部分?

我觉得你的问题遗漏了什么。

本例中只使用了一个body(".cpp")文件,所以它就在那里。更确切地说,它进入与析构函数相同的对象文件(".o"、".obj"等)。语言标准没有规定这一点,但我熟悉的所有实现都是这样做的