显式析构函数调用:异常和应用
在大多数情况下,由于未定义的行为,不鼓励显式析构函数调用。但是,C 11 标准在析构函数的模板参数规范的情况下提供了例外。
考虑以下代码片段:
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 }
在此示例中,允许显式析构函数调用,因为它们属于专门类模板的对象。模板参数(在本例中为 int)可以在析构函数调用语法中显式提供。
除此例外之外,还可以在放置删除的上下文中证明显式析构函数调用是合理的。这是因为当使用placement new分配内存时,必须显式调用析构函数来释放内存。
虽然对于常规变量通常不建议显式析构函数调用,但在以下场景中可以考虑使用:
总之,在某些情况下,例如模板参数规范或处理新的放置,显式析构函数调用是允许的。然而,谨慎行事并避免访问被破坏的对象以防止未定义的行为仍然至关重要。
以上是C 中何时允许显式析构函数调用?的详细内容。更多信息请关注PHP中文网其他相关文章!