c – 显式调用析构函数

我理解在大多数情况下,我们不应该明确调用析构函数。但是,我看到了一个例子从C 11标准N3485第13.4.5节模板参数:

An explicit destructor call for an object that has a type that
is a class template specialization may explicitly specify the
template-arguments. Example:

06000

在我看来,我们可以在这种情况下显式调用析构函数,你能解释一下为什么吗?那些析构函数调用在这个例子中是什么意思?为什么他们是合理的?

另一个问题:

除了我们实现放置删除之外,我们可以明确地调用析构函数的情况是什么?

谢谢。

编辑:我发现从 C++ FAQ ,我们不应该显式调用一个局部变量的析构函数。

It seems to me that we can call destructor explicitly in this case, could you explain to me why?

你的意思是我们为什么?因为语言允许对任何对象进行显式析构函数调用。正如你所说,它通常会给出未定义的行为,因为大多数对象将被以某种其他方式销毁,并且是未定义的行为,两次销毁任何东西(或更普遍地在销毁之后访问它)。但这只是意味着你不能这样做,不是该语言会阻止你这样做。

或者你是说我们想要什么?因为这就是你如何销毁由placement new创建的对象。

What does those destructor call mean in this example?

它们都意味着相同的东西,并且等同于p>〜A();他们调用对象的析构函数。示例演示,如果你想,你可以在这里提供模板参数。我不知道你为什么会想要。

What are the cases that we can call destructors explicitly besides placement delete?

我认为你可以调用一个简单的析构函数(一个不做任何事情),只要你喜欢;但没有意义。我认为破坏一些创造与放置新的是唯一的合法理由做它。

http://stackoverflow.com/questions/16720201/calling-destructor-explicitly

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 显式调用析构函数