我想使用智能指針,如auto_ptr,shared_ptr。但是,我不知道如何在這種情況下使用它。針對非對象類型的C++智能指針?
CvMemStorage *storage = cvCreateMemStorage();
... use the pointer ...
cvReleaseMemStorage(&storage);
我不確定,但我認爲存儲變量只是一個malloc'ed內存,而不是C++類對象。有沒有辦法將智能指針用於存儲變量?
謝謝。
我想使用智能指針,如auto_ptr,shared_ptr。但是,我不知道如何在這種情況下使用它。針對非對象類型的C++智能指針?
CvMemStorage *storage = cvCreateMemStorage();
... use the pointer ...
cvReleaseMemStorage(&storage);
我不確定,但我認爲存儲變量只是一個malloc'ed內存,而不是C++類對象。有沒有辦法將智能指針用於存儲變量?
謝謝。
shared_ptr
允許您指定自定義釋放器。然而,看着文檔cvReleaseMemStorage()
沒有合適的形式(void f(T*)
),你需要的包裝:
void myCvReleaseMemStorage(CvMemStorage* p) {
cvReleaseMemStorage(&p);
}
shared_ptr<CvMemStorage> sp(cvCreateMemStorage(), &myCvReleaseMemStorage);
另請注意,'shared_ptr'這個特性往往被低估。爲了使'auto_ptr'工作,用戶需要知道如何釋放它,但是使用'auto_ptr'指定在施工時如何釋放,然後它隱藏起來,用戶從不需要擔心。當然,默認值是一個經典的「刪除」調用。 – 2010-05-17 12:58:56
的shared_ptr
類可以爲您提供自定義刪除功能/仿函數,你可以簡單地包裹cvReleaseMemStorage
函數在函數中,並提供shared_ptr
連同你想讓它管理的指針?
我們沒有辦法告訴你如何在沒有看到「cvCreateMemStorage」來源的情況下分配內存。它可能是'malloc',它可能是'new'ed,它可能不是什麼東西,也許函數'cvCreateMemStorage'總是返回'NULL'。 – 2010-05-17 07:42:45
您確定'cvReleaseMemStorage'採用'CvMemStorage **'而不是'CvMemStorage *'?這似乎很奇怪。 – ereOn 2010-05-17 07:49:35
的確有點奇怪,但[它](http://opencv.willowgarage.com/documentation/dynamic_structures.html#releasememstorage)。 – 2010-05-17 07:55:45