【问题标题】:shared_ptr from pointershared_ptr 来自指针
【发布时间】:2011-07-02 13:28:41
【问题描述】:

我有一个不能在堆上创建的类,它有私有析构函数。

但是有一个函数可以返回指向这种构造对象的指针。我想从中创建一个共享指针:

MyClass *GetMyClassPointer() {...}

boost::shared_ptr<MyClass> ptr;
ptr = boost::shared_ptr<MyClass>(GetMyClassPointer()); // [x]

错误:'MyClass::~MyClass()' 是 私人的

有什么办法吗?

【问题讨论】:

  • 您应该提供更多关于类语义的信息。该类可能正在实现一个单例,在这种情况下,答案是您根本不应该使用shared_ptr,或者该类可能正在实现一个工厂或内存池,您必须在其中将对象释放回相同的工厂...答案取决于您未在问题中显示的信息。

标签: c++ pointers boost shared-ptr


【解决方案1】:

是的。

听起来实例是由有权访问私有构造函数(成员或朋友)的函数动态分配的。然后应该有一个公共函数用于在您完成实例后清理它,它可以访问私有析构函数(即使您没有)。

使用接受自定义删除器的shared_ptr 构造函数,并将其连接到类提供的清理函数(可能需要包装函数来获取匹配的签名)。

【讨论】:

  • 自定义删除器确实是这里的路。
猜你喜欢
  • 1970-01-01
  • 2011-06-19
  • 2020-07-10
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
相关资源
最近更新 更多