shared_ptr из указателя - PullRequest
       31

shared_ptr из указателя

3 голосов
/ 02 июля 2011

У меня есть класс, который нельзя создать в куче, и у него есть закрытый деструктор.

Но есть функция, которая возвращает указатель на такой созданный объект.Я хочу сделать из него общий указатель:

MyClass *GetMyClassPointer() {...}

boost::shared_ptr<MyClass> ptr;
ptr = boost::shared_ptr<MyClass>(GetMyClassPointer()); // [x]

ошибка: 'MyClass :: ~ MyClass ()' является приватной

Любыми способами?

1 Ответ

9 голосов
/ 02 июля 2011

Да.

Похоже, что экземпляр динамически распределяется функцией, которая имеет доступ к приватному конструктору (члену или другу). Затем должна быть открытая функция для очистки экземпляра, когда вы закончите с ним, у которого есть доступ к приватному деструктору (даже если у вас его нет).

Используйте конструктор shared_ptr, который принимает пользовательское средство удаления, и подключите его к функции очистки, предоставляемой классом (может потребоваться функция-обертка для соответствия подписи).

...