我编写了一个程序来测试在程序的生命周期中将构造多少个对象,如下所示:
class T
{
public:
virtual ~T() {cout << "dtor" << endl;}
};
const T* func()
{
T objinfunc;
return &objinfunc;
}
int main()
{
T objinmain = *func();
return 0;
}
我希望它将破坏三个对象(例如objinfunc,return object和objinmain)打印3次“dtor”,但最后会打印两个“dtor”。
我对结果感到困惑。
最佳答案
您将在这里返回当地人的地址:
const T* func()
{
T objinfunc;
return &objinfunc;
}
这将产生未定义的行为。函数返回时
objinfunc
已被破坏,您正在获取不存在的地址。除此之外,还要构造该对象的两个实例:一个在
func
中,另一个在main
中(至少您尝试这样做)。