Обновить

Комментарии 5

Это наследие компиляторов без шаблонов. Почему не обновят/дополнят API, не понятно. Они, ведь, уже не раз забивали на совместимость.

QPointer label = parent->AddChild<QLabel>("Hello");

Все эти умные указатели возникли из-за плохо продуманной архитектуры приложения, когда непонятно, кто владелец объекта, кто кого создает и удаляет. В Qt с архитектурой всё в порядке, поэтому такой проблемы не возникает.

Какая то ужасно дилетантская статья. Скорее всего сгенерирована нейросетью по запросу состоящему из заголовка.
1) QScopedPointer<QLabel> label(new QLabel("Hello", parent));
Дабл фри здесь не будет, в деструкторе ребенек убирается себя из списка детей. Зачем здесь ScopedPointer тоже непонятно, можно просто создать объект на стэке, если он будет нужен лишь временно - результат будет тот же (так иногда делают с QMsgBox). Ногострел может быть если только в рамках этого скоупа умрет уже сам родитель.
2) Любой умный указатель в таком цикле создаст оверхед.
Умный указатель в цикле просто не нужен, вы получаете невладеющий указатель на сырые байты изображения. Зачем тут вообще указатели если владеет данными сам QImage?
3)Хотя в новых версиях Qt иногда применяется QScopedPointer, использование std-аналогов там затруднено требованиями к бинарной совместимости (ABI).
Все намешано в кучу, std умные указатели ничем не хуже кутэшных при создании Pimpl. Человек даже не читал выхлоп нейросети, которая написала полную чушь. Pimpl как раз позволяет избежать проблем ABI и неважно как он реализован, эта идиома используется не только в QT

И так продолжать можно почти по каждому пункту, статья - мусор

Спасибо за замечания! Действительно не доработал и поспешил выложить. Сейчас уже всё поправил.

Ну да, как же. Сначала говорим про QScopedPointer, а через пару слов на голубом глазу у нас QSharedPointer. Дождитесь, пока нейросеть обучится нормально, а потом статьи строчите.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации