如果我有类似的东西:
auto foo=Foo(Bar())
其中 Foo 的构造函数采用对 Bar 的 const 引用,是否有某种方法可以确保 Bar 的析构函数不会在 foo 范围末尾的 foo 上的析构函数之前被调用,以便对 Bar 的引用仍然有效即使在 foo 的析构函数中?
最佳答案
保证析构函数的相对顺序。
auto foo=Foo(Bar());
由于 Bar()
是临时变量,因此保证在表达式末尾(即分号)被破坏。您绝对可以保证 Bar
在 foo
之前被销毁。
没有办法延长这个临时文件的生命周期,您必须复制它(可能通过移动它)。或者:
{
Bar b;
auto foo=Foo(b);
}
由于单个作用域中的对象以与构造它们相反的顺序销毁,因此由于这些对象位于同一作用域中,因此 b
将在 foo
之后被销毁已被摧毁。
关于c++ - 有没有办法保证析构函数的相对顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59869968/