我知道在大多数情况下,我们不应该显式调用析构函数。但是,我从 C++11 标准 N3485 第 13.4.5 节模板参数中看到了一个示例:
对具有类模板特化类型的对象的显式析构函数调用可以显式指定模板参数。例子:
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中发现我们不应该在局部变量上显式调用析构函数。