經過大約10年的使用託管內存和函數式語言,我終於回到了C++,智能指針讓我感到困惑。有一半的文件仍然與已棄用的auto_ptr
有關。unique_ptr與期望原始指針的API?
我想實現這個非常簡單的子彈"hello world"程序:
int _tmain(int argc, _TCHAR* argv[])
{
auto bp = unique_ptr<btBroadphaseInterface>(new btDbvtBroadphase);
auto cc = unique_ptr<btDefaultCollisionConfiguration>(new btDefaultCollisionConfiguration);
auto disp = unique_ptr<btDispatcher>(new btCollisionDispatcher(cc));
}
的btCollisionDispatcher
構造想要一個btCollisionConfiguration*
,但我給它一個unique_ptr
一個來代替。
在這種情況下,我通常要做什麼?如果有一種方法可以「清理」指針,某事告訴我unique_ptr
不是正確的智能指針。
C++是我的首選語言之前,我搬到其他的事情。看到所有的模式和實踐已經完全改變,這有點令人震驚。
我認爲答案取決於'btCollisionDispatcher'是否希望*共享*所有權或將*所有權?如果後者 - 你能否改變它來接受'unique_ptr'?如果是前者,則必須將其更改爲'shared_ptr'並將其傳入。 – Nim 2012-03-28 13:32:37
'disp'將保存到'cc'並使用它,直到它被破壞。它預計你會在其他地方使用它,就像稍後我調用'btWorld'構造函數時那樣,但它不會在我自己的範圍之外共享指針。 – 2012-03-28 13:36:10
它可能與您的問題沒有關係,但正如您所說,您來自託管語言背景,請確保不要過多使用垃圾郵件智能指針,並始終首先考慮自動存儲。只是一個小而重要的建議,不得不說。 – 2012-03-28 13:56:02