【发布时间】:2013-01-14 21:53:33
【问题描述】:
我有一个查询内部状态对象的类:
class State {...}; //Has a copy and move constructor
class Processor
{
private:
std::unique_ptr<State> state;
public:
void process(...)
{
State newState;
... //create this new state
state.reset(new State(newState));
}
State getState()
{
return std::move(*state.release());
}
};
std::move 的用法合适吗?我可以保证每次调用process 只会调用一次getState,但是由于这个特定系统的设计,我不能只从process 返回newState。 Stack Overflow 和其他地方的许多其他答案都说最好只返回对象,因为编译器无论如何都会移动它或 RVO 它,但这些都是在返回的对象是函数本地的情况下.
我不一定需要将状态对象放在 unique_ptr 后面,但这似乎是管理新状态对象的最简单方法。我的实际实现最后有一个指针直接转移到 unique_ptr。
【问题讨论】:
-
shared_ptr 不是更好的选择吗?
-
我想让 getState 函数只返回对象。我不想将实现的指针性暴露给外界。
-
你知道这个泄漏,是吗?
-
为什么不公开参考?跟正常人一样? :)
-
我很好奇这段代码打算解决的实际问题?
标签: c++ c++11 move-semantics unique-ptr rvalue-reference