繁体   English   中英

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

[英]Is it safe to end destructor with return statement?

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

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

    //other code
}

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

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

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

你用return; 如果应该停止执行析构函数,就像使用任何其他函数一样。


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

是。

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

遵守以下规则:

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

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

[stmt.return]/2return语句的expr-or- [stmt.return]/2 -init-list称为其操作数。 不带操作数的return语句只能用于返回类型为cv void的函数,构造函数或析构函数。 [..]

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

是的,可以用return来结束析构函数的执行。

是的,它不仅安全,标准明确声明它是等价的,并且它明确地将析构函数作为空返回语句的一个用例。

6.6.3退货声明[stmt.return]
1函数通过return语句返回其调用者。
2既没有表达式也没有braced-init-list的return语句只能用于不返回值的函数,即返回类型为cv void的函数,构造函数(12.1) 或析构函数 ( 12.4)。
[...]
流出函数末尾相当于没有值的返回

(我强调的是)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM