gpt4 book ai didi

c++ - 如何绕过成员函数末尾对析构函数的调用?

转载 作者:搜寻专家 更新时间:2023-10-31 00:29:52 24 4
gpt4 key购买 nike

我有一个具有非平凡不可复制(无论如何,可复制但非常昂贵)成员的结构,并且有一个我想要的成员函数,如果我调用它,它将转移成员的所有权。请看下面的演示代码:

class A{
// ...
};
struct s{
A instance;
A? take(){ // originally named get(), as mentioned in comment, for clarity
return instance?;
}
}; // Even after s is destroyed, instance should keep on

换句话说,我想延长实例的生​​命周期,然后在其他上下文中使用它。我尝试了几种方法,包括 return std::move(instance) 或将对象显式释放到临时变量,但都没有用。他们总是会调用实例的析构函数。

那么我该如何实现,返回 const 引用会有帮助吗?

最佳答案

  • 对象的生命周期不能超出其词法范围,除非它具有静态或线程存储持续时间。
  • 不能抑制对超出范围的对象的隐式析构函数调用,除非调用 std::exit 或以其他方式使程序崩溃。

这看起来像一个 XY problem .最有可能的是,实际的解决方案是让 take() 返回 A(按值)并使用 std::move 将资源从s::instance 到返回值,因此 s::instance 的析构函数是空操作。

A take() {
return std::move(instance);
}

但我们不能确定您是否不会告诉我们实际问题。

关于c++ - 如何绕过成员函数末尾对析构函数的调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39218136/

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