我有抽象类Managee和helper类包装器。指向Managee的指针,用于构造包装器,然后包装器将获得Managee的所有权。我希望确保用户始终分配新的Managee。rvalue-reference是否适合这个目标?
包装器定义:
...
Wrapper(Managee * && tmpptr);
Managee & GetManagee();
...包装器用法:
Wrapper a(new ManageeA()); // ok;
Wrapper b(&a.GetManagee()); // error? <-----发布于 2012-11-04 06:15:53
rvalue -引用不起作用,因为&a.GetManagee()是一个r值。为什么不考std::unique_ptr呢?
Wrapper(std::unique_ptr<Managee> ptr)
: member_ptr(std::move(ptr)) {}
Managee& GetManagee();用法:
Wrapper a(make_unique<Managee>(/*args*/));有关make_unique,请参阅here。
然而,最好的解决方案甚至不允许用户在堆栈上创建Managee的派生类型-这可以通过工厂函数(当然是std::unique_ptr)来完成,并使构造函数成为私有的:
class SomeClass : public Managee{
public:
static std::unique_ptr<SomeClass> create(){
return make_unique<SomeClass>();
}
private:
SomeClass(){}
// other ctors
};https://stackoverflow.com/questions/13213914
复制相似问题