【发布时间】:2017-09-09 00:36:47
【问题描述】:
我读了 Howard Hinnant (Is std::unique_ptr<T> required to know the full definition of T?) 的这个答案,然后读了这个答案 (How is a template instantiated?),我只是在想。如果你有这样的课
class Something {
Something();
~Something();
class Impl;
std::unique_ptr<Impl> impl;
};
unique_ptr 将在编译类时实例化(正如我可以从上面的其他答案中得出的那样)。那为什么以后不定义类Impl可以呢?实例化不需要Impl 的析构函数吗?
注意以下是为了澄清我上面的问题。
当编译器检查类Something 的定义时,我的想法是这样的。它将看到嵌套类Impl 的声明,然后它会看到unique_ptr<Impl> 的声明,然后在这一点上。它将用Impl 实例化模板unique_ptr。并且该实例化代码将包含对Impl 的析构函数的调用。由于此时我们的代码包含对不完整类的析构函数的调用,那么上面的代码如何安全?
【问题讨论】:
标签: c++ c++11 c++14 unique-ptr pimpl-idiom