模板方法在哪里实例化
Where are template methods instantiated?
为了将不完整类型与智能指针(如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"等)。语言标准没有规定这一点,但我熟悉的所有实现都是这样做的
相关文章:
- 如何创建一个空的全局类并在启动时实例化它
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 静态数据成员模板专用化的实例化点在哪里
- C++的解析器在可以区分比较和模板实例化之前会做什么?
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- 在 c++ 中的模板实例化中使用带有构造函数的类作为类型参数
- 如何在模板函数中实例化其长度使用模板参数的数组
- 函数在可变参数模板的实例化期间不可见
- 为什么我们不在下面给出的代码中使用指针来实例化C++的实体对象?
- 检查类是否在方法中实例化
- 如何使实例化在我的 OpenGL 程序中工作?
- 从函数中全局删除并重新实例化数组结构,而无需在编译时知道数组的大小
- 在实例化之前推断函数模板的返回类型
- 需要实例化不同类/对象并在启动时确定的硬件插槽的设计模式
- 模板方法在哪里实例化
- 我应该在哪里声明一个涉及多次实例化的类的枚举类
- C++ 类模板显式实例化在 macOS 上工作,在 ubuntu 上不起作用
- 实例化在另一个项目中定义的类时未解析的外部
- 显式模板实例化在XLC上产生编译错误,但在其他编译器上有效