c++ - 将指针转换为shared_ptr

标签 c++ pointers

我有一些库代码(我不能不更改源代码),它返回指向对象 (B) 的指针。我想将此指针存储为具有此类构造函数的类下的shared_ptr:

class A
{
  public:
   A(boost::shared_ptr<B> val);
   ...
  private:
   boost::shared_ptr<B> _val;
   ...
};

int main()
{
   B *b = SomeLib();
   A a(b); //??
   delete b;
   ...
} 

也就是说,我想对b进行深拷贝,并在a下控制它的生命周期(即使原来的b被删除(删除b),我在a下仍然有一个精确的拷贝)。

我是新手,很抱歉,如果它看起来微不足道......

最佳答案

如果库定义了这个 B 对象,则库应该提供(或完全禁止)复制 B 的机制。

作为旁注,

如果您的 A 类专门控制此复制对象的生命周期,那么您真正想要使用的智能指针是 boost::scoped_ptr

boost::shared_ptr 因其分担生命周期责任的能力而命名,这听起来像是您不想要的。 scoped_ptr 不会让这种情况意外发生。

关于c++ - 将指针转换为shared_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/887524/

相关文章:

c++ - STL Set inside Map ,奇怪的段错误和Valgrind分析

c++ - 具有模板方法 id 的模板类

c++ - 如何在 boost::unordered_map 中实现 TryGetValue?

c++ - C/C++ - 指针传递给 DLL 中的函数

c++ - 使用 new/malloc 是否可以绕过本地指针的警告?

c++ - 角度的 Slerp 插值结果为 -nan(ind)

c++ - 如何使用visual studio c++绘制图表

c - 如何在循环中使用scanf使用C中的指针将字符保存在数组中

c - 如何在 C 中为 int(不是 int*)数组动态分配内存?

c++ - 指针和面向对象编程