shr*_*ike 11 c++ constructor destructor
当一个类有一个简单的构造函数和/或一个普通的析构函数时,C++标准定义了一些非常具体的行为.
例如,根据标准的§3.8/ 1:
类型对象的生命周期在以下情况
T结束:- 如果
T是具有非平凡析构函数(12.4)的类类型,则析构函数调用将启动,或者- 重用或释放对象占用的存储空间.
所以,
虽然这个例子可能不是最好的例子,但它表明行为的差异可能是至关重要的(UB /非UB),无论一个对象是否具有琐事可破坏性.
标准的第12.4/3条规定,T如果一个类的析构函数是隐含的,而不是虚拟的,并且如果所有基类和类的成员T都是可以轻易破坏的,那么(对于sumezeze)类的析构函数是微不足道的.
在我的(适度)体验中,我从未在编译器生成的代码方面看到任何区别:
所以,我的问题是:
我的问题与标准无关(请不要回答标准陈述什么是微不足道的ctor/dtor,所以用户定义的ctor/dtor不是)但是编译器处理用户定义的ctor/dtor的方式以及以何种方式与普通的ctor/dtor相比,编译代码的行为可能会改变(或不改变).
您比我更了解标准,但是根据您提供的信息,该标准定义了一个简单的析构函数,但它没有定义一个空的析构函数,这会使这个问题产生误导。普通析构函数是编译器可以优化的特殊情况,虽然空构造函数对我们来说很有意义,但这不是编译器编写者必须考虑的事情。
浏览一些SO链接:
要回答你的第二个问题,只要你的 ctor 非空,它就不是微不足道的。最接近平凡的是一个空的 ctor/dtor,并且您仔细阅读标准已经告诉您,这并不是被定义为平凡的。
TL;DR:该标准定义了一个简单的 dtor,但不是空的。智能编译器可以选择注意到它是用户定义的空并将其视为微不足道,但标准不需要任何此类考虑。
| 归档时间: |
|
| 查看次数: |
4340 次 |
| 最近记录: |