2

auto_ptr、shared_ptr などのスマート ポインターを使用しようとしています。ただし、この状況での使用方法がわかりません。

CvMemStorage *storage = cvCreateMemStorage();
... use the pointer ...
cvReleaseMemStorage(&storage);

よくわかりませんが、ストレージ変数は単に malloc されたメモリであり、C++ クラス オブジェクトではないと思います。ストレージ変数にスマート ポインターを使用する方法はありますか?

ありがとうございました。

4

2 に答える 2

9

shared_ptrカスタムデアロケーターを指定できます。ただし、ドキュメントを見るとcvReleaseMemStorage()正しい形式(void f(T*))がなく、ラッパーが必要です。

void myCvReleaseMemStorage(CvMemStorage* p) {
   cvReleaseMemStorage(&p);
}

shared_ptr<CvMemStorage> sp(cvCreateMemStorage(), &myCvReleaseMemStorage);
于 2010-05-17T07:45:19.250 に答える
1

このshared_ptrクラスでは、カスタム削除関数/ファンクターを提供できます。cvReleaseMemStorage関数を関数でラップし、shared_ptrそれを管理するポインターと共に提供できますか?

于 2010-05-17T07:49:23.503 に答える