bit*_*ask 3 c++ scope destruction
自动对象(在堆栈上创建的对象)的销毁是否可以保证在它们超出范围之前执行?
澄清:
#include <iostream>
class A {
public:
A() {
std::cout << "1";
}
~A() {
std::cout << "3";
}
};
void test123() {
A a;
std::cout << "2";
}
Run Code Online (Sandbox Code Playgroud)
要打印"2",a不再需要了,所以从理论上讲,编译器可以a在不再需要时尽快进行优化和销毁.
我可以依靠以上功能始终打印123吗?
堆物件的破坏顺序被严格定义-它们在声明的相反的顺序执行,当你离开的范围(可以通过运行关闭的端部{},或通过return,或通过一个例外).所以,你会一直看到123那里.
但请注意,编译器优化由"as-if"规则控制.换句话说,编译器可以尽早销毁对象,只要生成的程序表现为'as-if'它在正常时被销毁.在这种情况下,因为您输出,编译器必须在适当的时间安排输出.但是,如果您有delete一个指向基本类型的da指针,并且编译器可以证明没有其他未指向该值的指针,原则上它可以delete更早地移动.关键是没有符合要求的程序能够注意到这种优化.
| 归档时间: |
|
| 查看次数: |
3526 次 |
| 最近记录: |