gpt4 book ai didi

c++ - 在 C++ 中调用函数时构造了多少个对象

转载 作者:行者123 更新时间:2023-11-30 02:50:08 25 4
gpt4 key购买 nike

我编写了一个程序来测试在程序的生命周期中将构造多少对象,如下所示:

class T
{
public:
virtual ~T() {cout << "dtor" << endl;}
};

const T* func()
{
T objinfunc;
return &objinfunc;
}
int main()
{
T objinmain = *func();
return 0;
}

我预计它会打印三次“dtor”以销毁三个对象,如 objinfunc、return object 和 objinmain,但它最后打印了两个“dtor”。

我对结果感到困惑。

最佳答案

你在这里返回一个本地人的地址:

const T* func() 
{
T objinfunc;
return &objinfunc;
}

这会产生未定义的行为。 objinfunc 在函数返回时已被销毁,您正在获取不再存在的地址。

除此之外,您构造了该对象的两个实例:一个在 func 中,另一个在 main 中(至少您尝试这样做)。

关于c++ - 在 C++ 中调用函数时构造了多少个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20684740/

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