我不确定我是否正确,因此问这个问题。
reset
boost::shared_ptr
指针的函数可用于初始化boost::shared_ptr<A>
类型的变量。
下面是我在代码中完成的示例代码:
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.
}
上述初始化A_ref
变量的方式是好还是有任何其他影响。
谢谢,
答案 0 :(得分:2)
您可以使用构造函数和/或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(struct B *b)
替换为setdata(B *b)
(在此省略不必要的结构)
答案 1 :(得分:1)
是的,这是重置共享指针的预期方法。
请参阅http://en.cppreference.com/w/cpp/memory/shared_ptr/reset
也支持赋值,并且具有类似的语义。
b->A_ref = boost::make_shared<A>();
通常首选Make-shared,因为