首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >允许仅将指针传递给new‘’ed对象

允许仅将指针传递给new‘’ed对象
EN

Stack Overflow用户
提问于 2012-11-04 06:01:20
回答 1查看 97关注 0票数 0

我有抽象类Managee和helper类包装器。指向Managee的指针,用于构造包装器,然后包装器将获得Managee的所有权。我希望确保用户始终分配新的Managee。rvalue-reference是否适合这个目标?

包装器定义:

代码语言:javascript
复制
...
Wrapper(Managee * && tmpptr);
Managee & GetManagee();
...

包装器用法:

代码语言:javascript
复制
Wrapper a(new ManageeA()); // ok;
Wrapper b(&a.GetManagee()); // error?    <-----
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-04 06:15:53

rvalue -引用不起作用,因为&a.GetManagee()是一个r值。为什么不考std::unique_ptr呢?

代码语言:javascript
复制
Wrapper(std::unique_ptr<Managee> ptr)
  : member_ptr(std::move(ptr)) {}

Managee& GetManagee();

用法:

代码语言:javascript
复制
Wrapper a(make_unique<Managee>(/*args*/));

有关make_unique,请参阅here

然而,最好的解决方案甚至不允许用户在堆栈上创建Managee的派生类型-这可以通过工厂函数(当然是std::unique_ptr)来完成,并使构造函数成为私有的:

代码语言:javascript
复制
class SomeClass : public Managee{
public:
  static std::unique_ptr<SomeClass> create(){
    return make_unique<SomeClass>();
  }
private:
  SomeClass(){}
  // other ctors
};
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13213914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档