这个 -> ~T() 是做什么用的?

3
有人能解释一下这段代码在做什么吗? 我第一个想法是d()调用了自己的析构函数,但我不明白为什么你不能自己调用T的析构函数。
class T
{
    void d()
    {
        this -> ~T();
    }
}

Thank you in advance.

4个回答

9

这个操作会显式调用thisT析构函数~T。通常情况下,当一个对象超出其作用域或被delete时,C++会自动调用其析构函数,因此这个操作通常不是必需的。没有更多上下文信息,很难确定代码中发生了什么以及为什么作者认为这是必要的。


当你绝对、肯定需要摧毁这个时。 - rrhartjr
为什么不创建一个显式的destroy方法,然后由析构函数调用它?那会更加明确和规范,或者我有什么遗漏吗? - Niklas B.
2
@NiklasB。我不知道,也许需要咨询原帖作者。我只是写Sass。 - rrhartjr
@Greg,这个会抛出异常吗? - Ash Burlaczenko
@AshBurlaczenko:是的,一个类的析构函数可能会抛出异常。 - Greg Hewgill
显示剩余6条评论

2

你是正确的。

d() 调用析构函数,也可以直接调用析构函数。

请记住,这并没有像调用 delete 一样恢复内存。


1

我应该显式地在本地变量上调用析构函数吗?

不需要!

析构函数将在创建本地变量的块的关闭}处再次调用。这是语言的保证;它会自动发生;无法阻止它发生。但是,如果在同一对象上第二次调用析构函数,可能会导致非常糟糕的结果!砰!你挂了!

更多细节 - http://www.parashift.com/c++-faq-lite/dtors.html#faq-11.1


你怎么知道它是在局部变量的上下文中使用的?如果你使用了放置 new,你需要显式调用析构函数。但我没有理由为此声明一个成员函数。 - rasmus

-1

看起来它调用了当前类的析构函数...这样做很奇怪,基本上它会“重置”对象,如果析构函数被正确编写的话...但通常你也需要重新实例化成员变量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接