の使用に関するベスト プラクティスについていくつか質問があり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*
?これを行うための2つのアプローチを見つけました。
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;
}
どんな助けでも素晴らしいでしょう。