Библиотека определяет непрозрачный тип данных:
struct OpaqueStruct;
и код клиента должен получить и выпустить OpaqueStruct*
, У меня есть доступ к источнику библиотеки.
К сожалению, ни shared_ptr
ни unique_ptr
не может хранить этот указатель, дающий
ошибка: неверное применение «sizeof» к неполному типу.
Лучшее, что я могу придумать, это позаимствовать наконец охранник из этого поста.
Как мне использовать RAII для непрозрачных структурных указателей?
Вы можете создавать и удалять только полные типы, см. Также здесь: Удаление указателя на неполный тип «Точка»; деструктор не называется. Поэтому, по крайней мере, фрагмент кода, выполняющий построение / уничтожение, должен знать полный тип.
Вы можете объявить unique_ptr или shared_ptr, используя неполный тип. Сведения о том, какие члены этих интеллектуальных указателей можно использовать в контексте, в котором известен только неполный тип, см. В разделе Является ли std :: unique_ptr<T> Требуется знать полное определение Т?.
std::unique_ptr<OpaqueStruct, void(*)(OpaqueStruct*)>
ops(newOpaqueStruct(), deleteOpaqueStruct)