C ++ умный указатель для необъектного типа? - PullRequest
2 голосов
/ 17 мая 2010

Я пытаюсь использовать умные указатели, такие как auto_ptr, shared_ptr. Однако я не знаю, как использовать его в этой ситуации.

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

Я не уверен, но я думаю, что переменная хранения - это просто память, размещенная на malloc, а не объект класса C ++. Есть ли способ использовать умные указатели для переменной хранения?

Спасибо.

Ответы [ 2 ]

9 голосов
/ 17 мая 2010

shared_ptr позволяет вам указать пользовательский деллоокатор. Тем не менее, просмотр документации cvReleaseMemStorage() не имеет правильной формы (void f(T*)), и вам нужна оболочка:

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

shared_ptr<CvMemStorage> sp(cvCreateMemStorage(), &myCvReleaseMemStorage);
1 голос
/ 17 мая 2010

Класс shared_ptr позволяет вам предоставить пользовательскую функцию / функцию удаления, вы можете просто обернуть функцию cvReleaseMemStorage в функцию и указать ее для shared_ptr вместе с указателем, которым вы хотите управлять

...