gpt4 book ai didi

C++ 析构函数 : Undefined Behaviour or not?

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

考虑以下代码

#include<iostream>
#include<string>

class A
{
private:
char name[10];

public:
A() { }
A(const char *str)
{
strcpy(name, str);
std::cout<<name<<" constructed"<<endl;
}
~A()
{
std::cout<<name<<" destructed"<<endl;
}
};

int main()
{
A a("a");
A b("b");
return 0;
}

以下程序的 O/P 结果是:

a constructed
b constructed
b destructed
a destructed

我对上面的代码唯一的解释是,由于 b 是在 a 之后创建的,所以它应该存储在 a 之上堆。现在,当 main 完成时,b 首先被弹出,然后是 a,因此它的析构函数首先被调用,然后是 a 的析构函数。

我的问题是:我的想法是否正确,或者以上是未定义的行为并且可能因编译器而异?

最佳答案

它没有变化,自动内存(堆栈)中的对象按照创建它们的相反顺序销毁。它完全由标准指定。

C++03 15.2。构造函数和析构函数

  1. [...] The automatic objects are destroyed in the reverse order of the completion of their construction.

关于C++ 析构函数 : Undefined Behaviour or not?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11072755/

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