mar*_*964 2 c++ destructor c++17
如果我有类似的东西:
auto foo=Foo(Bar())
Run Code Online (Sandbox Code Playgroud)
Foo 的构造函数采用对 Bar 的 const 引用,是否有某种方法可以确保在 foo 范围末尾的 foo 上的析构函数之前不会调用 Bar 的析构函数,以便对 Bar 的引用即使在 foo 的析构函数?
析构函数的相对顺序是有保证的。
auto foo=Foo(Bar());
Run Code Online (Sandbox Code Playgroud)
既然Bar()是临时的,那么它肯定会在表达式的末尾被破坏:也就是分号。你绝对可以保证在Bar之前被销毁foo。
没有办法延长这个临时文件的生命周期,您必须复制它(可能通过移动它)。或者:
{
Bar b;
auto foo=Foo(b);
}
Run Code Online (Sandbox Code Playgroud)
由于单个作用域中的对象以它们构造的相反顺序销毁,那么由于它们在同一作用域中,b将在销毁后foo销毁。
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |