關於使用shared_ptr
的最佳實踐,我幾乎沒有問題。有關shared_ptr用法的問題 - C++
問題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
?如果是的話,它提供了什麼優勢?當T
沒有無參數構造函數時,我們如何使用make_shared
?
問題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;
}
OR
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;
}
任何幫助將是偉大的。
的文檔具有定時頁:http://www.boost.org/doc/libs/1_41_0/libs/smart_ptr/smarttests.htm – 2010-01-27 05:55:06