gpt4 book ai didi

c++ - 自动对象销毁

转载 作者:太空狗 更新时间:2023-10-29 19:46:48 25 4
gpt4 key购买 nike

是否保证自动对象(在堆栈上创建的对象)的销毁不在它们超出范围之前执行?

澄清一下:

#include <iostream>

class A {
public:
A() {
std::cout << "1";
}
~A() {
std::cout << "3";
}
};

void test123() {
A a;
std::cout << "2";
}

要打印"2",不再需要a,所以理论上编译器可以尝试尽快优化和销毁a因为不再需要它了。

我可以依赖上面的函数总是打印123吗?

最佳答案

堆栈对象的销毁顺序是严格定义的 - 它们以声明的相反顺序执行,当您离开范围时(通过运行 {} 的末尾,或通过 返回,或通过异常)。因此,您将总是在那里看到 123

但是请注意,编译器优化受“as-if”规则约束。换句话说,编译器可以提前销毁一个对象,只要生成的程序表现得“好像”它在正常时间被销毁了。在这种情况下,因为你做输出,编译器必须在适当的时间安排输出。但是,例如,如果您 deleted 指向原始类型的指针,并且编译器可以证明没有其他未完成的指针指向该值,原则上它可以移动该 早点删除。关键是没有符合要求的程序能够注意到这种优化。

关于c++ - 自动对象销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7223734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com