gpt4 book ai didi

c++ - 返回对象时 ctor/dtor 的顺序

转载 作者:行者123 更新时间:2023-11-28 07:54:47 25 4
gpt4 key购买 nike

<分区>

这个 dtor/ctor 顺序是否正常,如果是,为什么?

在下面的简单函数中

TemporaryObject SimpleFunction();
{
TemporaryObject obj = MakeObj();

// ...

return obj; // Stepping through at this point we hit TemporaryObject::dtor, MyObject::ctor
}

// At call site
MyObject obj = SimpleFunction();

在返回语句中,我希望调用 MyObject ctor,然后调用 TemporaryObject dtor。 (可能会首先复制 TemporaryObject,但这里的 RVO 很典型)。

在 VS2010(调试构建)中发生的事情是首先调用 TemporaryObject dtor,然后使用被破坏的对象调用 MyObject 构造函数。查看内存地址可以确认传入的是被破坏的对象,如果有任何疑问,析构函数的副作用是显而易见的。

(为了完整起见,MyObject ctor 在 TemporaryObject 中设置了一个标志,标记它已被复制。TemporaryObject dtor 断言已设置此标志,这就是我意识到在这种情况下“复制”之前发生破坏的方式)。

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