令f()
为返回unique_ptr<X>
的函数,令m
为X
的成员字段。虽然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); }
}