gpt4 book ai didi

C++:为智能指针的字段隐式保留右值引用

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

f()是一个返回 unique_ptr<X> 的函数让m成为 X 的成员字段.同时 f()可以用作右值引用,f()->m不能,逼我用 move(f()->m) .

假设我可以定义自己的 unique_ptr除了使用现有的,有没有办法让我的 ->运营商保持右值?如果不推荐这样做,请解释原因。

编辑:所有告诉我添加 setter/getter 的人。我试图避免在 X 中添加特殊支持,我只想通过 unique_ptr 来完成。此外,您的解决方案可以通过使用正确的引用来改进,如下例所示:

struct X {
SomeType m;
const SomeType &getM() const { return m; }
SomeType &&getM() && { return move(m); }
SomeType &getM() { return m; }
}

最佳答案

只要您通过名称访问值 m,如果不强制转换,它永远不可能是右值。但是,您可以添加一个成员函数,将成员值“移出”您的对象。

using IntPtr = std::unique_ptr<int>;
class X {
IntPtr m;
public:
X();
IntPtr getM() { return std::move(m); }
}

关于C++:为智能指针的字段隐式保留右值引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28813606/

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