По историческим причинам я использую QSharedPointer<T>
в моем программном обеспечении. В некоторые моменты мы хотим хранить boost::shared_ptr<T>
которые указывают на одни и те же данные, и которые должны поддерживать в QSharedPointer<T>
,
Обычный способ сделать это — сохранить копию другого умного указателя в boost::shared_ptr<T>
, Но для того, чтобы средство удаления не имело разных типов для разных T
с, что помешало бы легко получить QSharedPointer
вернуться с boost::get_deleter
когда соответствующий boost::shared_ptr
был удручен, я хотел сохранить оригинал QSharedPointer<T>
как QSharedPointer<void>
внутри средства удаления, в отличие от использования T
,
Но я нахожу это QSharedPointer
не соответствует задаче, так как выдает ошибки типа «ссылка на void невозможна» при компиляции заголовка.
У кого-нибудь есть идеи о том, как заставить это работать без разоблачения T
в удалитель?
Вы не можете определить QSharedPointer, потому что void не является правильным типом. Вы можете определить QSharedPointer и затем привести к и от T * и char * Вот так:
class A {};
QSharedPointer<char> x((char *)new A);
A *ptr = (A *)x.data();
Ужасно, но это работает. Вам также может понадобиться передать Deleter, который корректно удаляет класс в конструкторе, чтобы правильно уничтожить ваш класс.
Лучшей альтернативой было бы использование базового класса.