c++ - 有没有办法保证析构函数的相对顺序?

标签 c++ c++17 destructor

如果我有类似的东西:

auto foo=Foo(Bar())

其中 Foo 的构造函数采用对 Bar 的 const 引用,是否有某种方法可以确保 Bar 的析构函数不会在 foo 范围末尾的 foo 上的析构函数之前被调用,以便对 Bar 的引用仍然有效即使在 foo 的析构函数中?

最佳答案

保证析构函数的相对顺序。

auto foo=Foo(Bar());

由于 Bar() 是临时变量,因此保证在表达式末尾(即分号)被破坏。您绝对可以保证 Barfoo 之前被销毁。

没有办法延长这个临时文件的生命周期,您必须复制它(可能通过移动它)。或者:

{
   Bar b;
   auto foo=Foo(b);
}

由于单个作用域中的对象以与构造它们相反的顺序销毁,因此由于这些对象位于同一作用域中,因此 b 将在 foo 之后被销毁已被摧毁。

关于c++ - 有没有办法保证析构函数的相对顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59869968/

相关文章:

c++ - 遗留代码在析构函数中抛出异常

c++ - 负数的按位运算会导致ub吗?

c++ - 具有与 char* 相同的别名含义的 std::byte 指针吗?

c++ - 是否可以定义一个宏来定义枚举类和返回枚举元素计数的 GetCount() 方法?

c - 如何查询 pthread 以查看它是否仍在运行?

c++ - Mex 类内存泄漏 - STL 映射是否需要析构函数?

c++ - 异常规范如何影响虚拟析构函数覆盖?

c++ - 无法理解静态行为

c++ - fatal error LNK1120 : 4 unresolved externals

c++ - 在 OpenGL 中启用深度测试后,我的整个屏幕都是空白的(恢复为清晰的颜色)——为什么?