我在想:他们说如果你手动调用析构函数 - 你做错了什么.但情况总是这样吗?有反例吗?有必要手动调用它或者难以避免的情况/不可能/不切实际的情况吗?
我知道在大多数情况下,我们不应该明确地调用析构函数.但是,我在C++ 11 Standard N3485第13.4.5节模板参数中看到了一个例子:
对具有类模板特化的类型的对象的显式析构函数调用可以显式指定template-arguments.例:
Run Code Online (Sandbox Code Playgroud)template<class T> struct A { ~A(); }; void f(A<int>* p, A<int>* q) { p->A<int>::~A(); // OK: destructor call q->A<int>::~A<int>(); // OK: destructor call }
在我看来,在这种情况下我们可以明确地调用析构函数,你能解释一下为什么吗?在这个例子中,这些析构函数的含义是什么意思?为什么他们合理?
另一个问题:
除了我们实现之外,我们可以明确地调用析构函数的情况是什么placement delete?
谢谢.
编辑:我从C++ FAQ中发现,我们不应该在局部变量上显式调用析构函数.