|
2 / 2 / 2
Регистрация: 23.10.2016
Сообщений: 139
|
||||||||||||||||
Умные указатели в классах15.02.2017, 00:58. Показов 10616. Ответов 12
Допустим у меня есть класс:
Выделяется память для них путем вызова new. Но я так понимаю, что это плохая практика и вместо new/delete нужно использовать умный указатель (например: QSharedPointer). Значит, поля нужно прописывать вот так:
2. В Qt можно использовать свои умные указатели (QSharedPointer), а можно использовать стандартные (shared_ptr). Какими лучше пользоваться?
0
|
||||||||||||||||
| 15.02.2017, 00:58 | |
|
Ответы с готовыми решениями:
12
Умные указатели в Qt Умные указатели на QObject
|
|
184 / 176 / 57
Регистрация: 25.09.2014
Сообщений: 834
|
||||||
| 15.02.2017, 10:00 | ||||||
|
Пользуйся каким хочешь. Я принципиально не пользуюсь умными указателями, чтобы не городить лишние сложночитаемые (для меня, имхо) громадины аля QSharedPointer<QGraphicsScene>.
Создание переменных через new - нормальная практика. Под ковром у QSharedPointer, насколько я знаю, все равно происходит все тоже самое. Просто тебе не нужно явно создавать и удалять содержимое своего указателя через:
1
|
||||||
|
93 / 93 / 33
Регистрация: 17.03.2012
Сообщений: 536
|
||
| 15.02.2017, 10:11 | ||
|
Фишка их использования, например, в возврате указателя из функции и ситуация, когда код будет изменяться и изменяющий забудет освободить память, а если возвращать умный указатель, то память освободиться Единственное, надо правильно определиться с типом умного указателя Если вам не нравятся кутишные умные указатели, можете пользоваться из стандартной библиотеки, там буковок поменьше, все в нижнем регистре
1
|
||
|
Pied Piper
237 / 228 / 57
Регистрация: 15.01.2013
Сообщений: 855
|
||
| 15.02.2017, 11:22 | ||
|
При конструировании гуя на самом деле нет необходимости в использовании QSharedPointer. Грубо говоря, кнопку мы добавили в диалог - при вызове деструктора диалога вызовется и деструктор кнопки. Полезнее может быть использование QPointer. Во всех остальных случаях я бы рекомендовал использование умных указателей, почитайте про RAII.
Добавлено через 1 минуту
1
|
||
|
93 / 93 / 33
Регистрация: 17.03.2012
Сообщений: 536
|
|||
| 15.02.2017, 11:34 | |||
|
1
|
|||
|
93 / 93 / 33
Регистрация: 17.03.2012
Сообщений: 536
|
|
| 15.02.2017, 12:05 | |
|
Wyn, Ну если в лэйаут какой-то, принадлежащий этому виджету добавили, то да
1
|
|
|
Pied Piper
237 / 228 / 57
Регистрация: 15.01.2013
Сообщений: 855
|
|
| 15.02.2017, 12:21 | |
|
Slip., ну обычно виджеты создаются, чтобы их отображать. Если ему не установили явно родителя или не добавили в лэйаут - то это ошибка разработчика. Поэтому, я взял за правило при создании виджета всегда передавать в конструктор родителя.
1
|
|
|
2 / 2 / 2
Регистрация: 23.10.2016
Сообщений: 139
|
|
| 16.02.2017, 01:34 [ТС] | |
|
О пользе умных указателей в с++ (в методах и т.д.) я в курсе.
Меня интересует конкретно поля класса, стоит ли там их использовать? Добавлено через 7 часов 47 минут Не по теме: Ну ребята, вы меня расстроили)
0
|
|
|
|
|
| 16.02.2017, 10:06 | |
|
Tyson Fury, тут не нужно вообще запариваться с указателями. Наследники от QObject - просто определите parent правильно, без циклов - и будет вам счастье.
Shared pointer сделан не для удобного хранения алгоритма, а для совладения объектом, когда, например, множество сущностей, создаваемое пользователем, делят одну модель. То же про unique pointer, только на 180 градусов. Если часто удаляете-создаёте объект и есть проверки, делайте QPointer, он автоматически обнуляется при удалении объекта, меньше шансов на косяк. В противном случае оставляйте сырые указатели. Это, в конце концов, C++, а не хипстерское говно с решетками.
1
|
|
| 16.02.2017, 11:26 | |
|
0
|
|
|
2 / 2 / 2
Регистрация: 23.10.2016
Сообщений: 139
|
|||||||
| 16.02.2017, 17:22 [ТС] | |||||||
0
|
|||||||
|
|
||||||
| 17.02.2017, 06:43 | ||||||
|
Сферически в вакууме? Вполне. Но я бы, к примеру, активнее использовал QWeakPointer там, где это имеет смысл, а именно, в тех случаях, когда мы не захватываем очередную ноду во владение. Ну и дважды подумал, а мне правда нужно отдавать управление памятью на откуп системе, или я и сам сусам.
З.Ы. explicit A(); explicit здесь лишний, он предотвращает неявное обращение параметра конструктора при записи в виде приравнивания aka
0
|
||||||
| 17.02.2017, 06:43 | |
|
Помогаю со студенческими работами здесь
13
Умные указатели умные указатели Умные указатели
Умные указатели Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
в-строка - входное арифметическое выражение в инфиксной(обычной). . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|