f()为返回unique_ptr<X>的函数,令mX的成员字段。虽然f()可用作右值引用,但f()->m不能,迫使我使用move(f()->m)

假设我可以定义自己的unique_ptr而不是使用现有的->,有没有办法使我的ojit_code运算符保持右值?如果不建议这样做,请说明原因。

编辑:所有人告诉我添加 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值,就必须在不进行强制转换的情况下将其作为r值。但是,您可以添加一个成员函数,该成员函数将成员值“移出”对象。

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

09-08 04:12