初始化 boost::shared_ptr <A>类型变量的正确方法

correct way to initialize a variable of the type boost::shared_ptr<A>

本文关键字:类型变量 方法 gt lt shared boost ptr 初始化      更新时间:2023-10-16

我不确定我做得是否正确,因此问了这个问题
boost::shared_ptr指针的reset函数,可用于初始化类型为boost::shared_ptr<A>的变量。以下是我在代码中完成的wat示例代码:

struct A
{
};
struct B
{
   int x;
   std::string ss;
   boost::shared_ptr<A> A_ref; 
};
setdata(struct B *b)
{
   b->x=10;
   b->ss="hello";
   b->A_ref.reset(new A()); // initializing A_ref variable using reset function.
}

上述初始化CCD_ 4变量的方式是好的还是有任何其他效果。

谢谢,

您可以使用构造函数和/或setter函数来避免独立函数:

#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>
struct A {};
struct B
{
   int x;
   std::string ss;
   boost::shared_ptr<A> A_ref;
   B()
   :    x(10), ss("hello"), A_ref(boost::make_shared<A>())
   {}
   void set();
};
void B::set() {
   x=10;
   ss="hello";
   A_ref = boost::make_shared<A>();
}

注意:make_shared更可取(见@sehe的回答(。

附带说明:您可以用setdata(B *b)替换setdata(struct B *b)(此处省略不必要的结构(

是的,这是重置共享指针的预期方法。

请参阅http://en.cppreference.com/w/cpp/memory/shared_ptr/reset

还支持赋值,并且具有类似的语义。

b->A_ref = boost::make_shared<A>();

Make shared通常是首选,因为

  • 它可以帮助在具有多个共享指针参数的函数调用中获得异常安全性
  • 它可以导致参考计数的更有效的内存表示