c ++ 11 — unique_ptr для непрозрачной структуры? (C ++)

Библиотека определяет непрозрачный тип данных:

struct OpaqueStruct;

и код клиента должен получить и выпустить OpaqueStruct*, У меня есть доступ к источнику библиотеки.

К сожалению, ни shared_ptr ни unique_ptr не может хранить этот указатель, дающий
ошибка: неверное применение «sizeof» к неполному типу.

Лучшее, что я могу придумать, это позаимствовать наконец охранник из этого поста.

Как мне использовать RAII для непрозрачных структурных указателей?

2

Решение

Вы можете создавать и удалять только полные типы, см. Также здесь: Удаление указателя на неполный тип «Точка»; деструктор не называется. Поэтому, по крайней мере, фрагмент кода, выполняющий построение / уничтожение, должен знать полный тип.

Вы можете объявить unique_ptr или shared_ptr, используя неполный тип. Сведения о том, какие члены этих интеллектуальных указателей можно использовать в контексте, в котором известен только неполный тип, см. В разделе Является ли std :: unique_ptr<T> Требуется знать полное определение Т?.

3

Другие решения

std::unique_ptr<OpaqueStruct, void(*)(OpaqueStruct*)>
ops(newOpaqueStruct(), deleteOpaqueStruct)
2

По вопросам рекламы [email protected]