[英]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]/2
:return
语句的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.