我对使用shared_ptr
.
问题 1
抄袭shared_ptr
便宜吗?还是我需要将它作为对我自己的辅助函数的引用并作为值返回?就像是,
void init_fields(boost::shared_ptr<foo>& /*p_foo*/);
void init_other_fields(boost::shared_ptr<foo>& /*p_foo*/);
boost::shared_ptr<foo> create_foo()
{
boost::shared_ptr<foo> p_foo(new foo);
init_fields(p_foo);
init_other_fields(p_foo);
}
问题2
我应该boost::make_shared
用来构造一个shared_ptr
吗?如果是,它提供了哪些优势?make_shared
当T
没有无参数构造函数时,我们如何使用?
问题 3
如何使用const foo*
?我找到了两种方法来做到这一点。
void take_const_foo(const foo* pfoo)
{
}
int main()
{
boost::shared_ptr<foo> pfoo(new foo);
take_const_foo(pfoo.get());
return 0;
}
或者
typedef boost::shared_ptr<foo> p_foo;
typedef const boost::shared_ptr<const foo> const_p_foo;
void take_const_foo(const_p_foo pfoo)
{
}
int main()
{
boost::shared_ptr<foo> pfoo(new foo);
take_const_foo(pfoo);
return 0;
}
问题 4
如何返回并检查NULL
对象shared_ptr
?是不是有点像,
boost::shared_ptr<foo> get_foo()
{
boost::shared_ptr<foo> null_foo;
return null_foo;
}
int main()
{
boost::shared_ptr<foo> f = get_foo();
if(f == NULL)
{
/* .. */
}
return 0;
}
任何帮助都会很棒。