【发布时间】:2021-01-28 04:24:13
【问题描述】:
我知道在大多数情况下,我们不应该显式调用析构函数。但是,我看到了一个来自 C++11 Standard N3485 Section 13.4.5 Template arguments 的示例:
对具有以下类型的对象的显式析构函数调用 是一个类模板特化可以显式指定 模板参数。示例:
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 发现我们不应该在局部变量上显式调用析构函数。
【问题讨论】:
-
引用的帖子是关于在局部变量上显式调用析构函数,其析构函数也会在其作用域结束时再次隐式调用。
-
+1 我在我的代码中做了一些类似的废话,明确调用析构函数来销毁我的对象(或者至少它似乎有效)。但我已经在托管类型上完成了。看到答案会很有趣
-
@AndyThomas-Cramer 我理解,我的意思是引用关于显式析构函数调用标准的答案的解释。我的帖子有误导性吗?如果这是一个问题,我会尝试改写它。
-
@taocp - 在这里澄清一下,正如在引用的帖子中,未定义的行为没有显式调用析构函数 - 它导致它在同一个对象上被调用不止一次 i>.
-
@AndyThomas-Cramer 啊,我同意。我主要看答案。我会尝试纠正它。谢谢!
标签: c++ destructor