使用return语句结束析构函数是否安全?

lev*_*one 26 c++ destructor

在我的Doubly Linked列表类中,我正在编写析构函数,这是我的代码:

DLinkedList::~DLinkedList() {
    if (head==NULL) {
        return;
    }

    // Other code
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,用return;声明结束析构函数是否安全?我知道我可以使用语句结束我的void函数return;,但这是一个析构函数.

πάν*_*ῥεῖ 27

我的问题是,用return;声明结束析构函数是否安全?我知道我可以使用语句来结束我的void函数,return;但这是一个析构函数.

析构函数与void返回类型的函数没有太大区别,此外,每当类的生命周期结束时,析构函数会自动执行1.

您可以使用return;,如果析构函数的执行应该停止,因为你与任何其他功能做.


1)这同样适用于构造函数BTW.


Lig*_*ica 12

是.

从这个意义上讲,析构函数体的作用就像一个返回的函数void,除了基础和成员即使你return很早就会被销毁(因为它从不依赖于析构函数体的内容).

遵守以下规则:

[special]/1:默认构造函数([class.default.ctor]),复制构造函数,移动构造函数([class.copy.ctor]),复制赋值运算符,移动赋值运算符([class.copy.assign])和析构函数([class.dtor])是特殊成员函数.[..]

[stmt.return]/1:函数通过return语句返回其调用者.

[stmt.return]/2:在EXPR -或-支撑-初始化列表一个的return声明被称为它的操作数.return不带操作数的语句只能在返回类型为cv void,构造函数或析构函数的函数中使用.[..]

[class.dtor]/9:[..]一个return声明([stmt.return]在析构函数)可能不会直接返回给调用者; 在将控制转移给调用者之前,调用成员和基础的析构函数.[..]


gsa*_*ras 7

是的,可以用a结束析构函数的执行return.

  • 没有规则说只应该有一个好的答案.Stack Overflow的好处在于我可以同时回答你的答案,而不只是一个:) (3认同)