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

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中(至少您尝试这样做)。

10-07 13:34