Нарушение ли это принципа RAII?
От: Shmj Ниоткуда  
Дата: 07.01.23 18:09
Оценка:
Вот смотрите, QT принимает указатель на QGraphicsEffect в метод setGraphicsEffect(*QGraphicsEffect) класса QWidget.

Однако же при удалении QWidget они удаляют и переданный QGraphicsEffect. Даже если он создавался в другом месте и был передан в конструктор виджета.

Правы ли они?
Re: Нарушение ли это принципа RAII?
От: DiPaolo Россия  
Дата: 07.01.23 18:18
Оценка: +2
S>Вот смотрите, QT принимает указатель на QGraphicsEffect в метод setGraphicsEffect(*QGraphicsEffect) класса QWidget.
Это не про RAII. Про него написано тут https://en.cppreference.com/w/cpp/language/raii.

S>Однако же при удалении QWidget они удаляют и переданный QGraphicsEffect. Даже если он создавался в другом месте и был передан в конструктор виджета.


S>Правы ли они?

Да. Их право, как сделать. Они ж написали в доке:

QWidget takes ownership of effect.

Патриот здравого смысла
Re[2]: Нарушение ли это принципа RAII?
От: Shmj Ниоткуда  
Дата: 07.01.23 18:31
Оценка:
Здравствуйте, DiPaolo, Вы писали:

S>>Вот смотрите, QT принимает указатель на QGraphicsEffect в метод setGraphicsEffect(*QGraphicsEffect) класса QWidget.

DP>Это не про RAII. Про него написано тут https://en.cppreference.com/w/cpp/language/raii.

Но кто выделяет память в куче для объекта QGraphicsEffect?
Re: Нарушение ли это принципа RAII?
От: rg45 СССР  
Дата: 07.01.23 19:06
Оценка: +9 :)
Здравствуйте, Shmj, Вы писали:

S>Нарушение ли это принципа RAII?


Нарушить можно закон, клятву или обещание. А RAII — это просто техника, идома — ее можно использовать или не использовать. В этом случае RAII не используется. Ты бы и сам это легко понял, если бы открыл хотя бы википедию. С тем же успехом можно было бы спросить "нарушение ли это идиомы pImpl?". Нет, не нарушение — просто здесь это не используется.

S>Правы ли они?


С этим вопросом лучше к правоведам.

P.S. Мне интересно, ты, прежде чем что-то написать, делаешь какие-нибудь паузы, чтоб подумать, или тебе главное, чтоб побольше текста было?
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 07.01.2023 19:18 rg45 . Предыдущая версия . Еще …
Отредактировано 07.01.2023 19:15 rg45 . Предыдущая версия .
Отредактировано 07.01.2023 19:11 rg45 . Предыдущая версия .
Re: Нарушение ли это принципа RAII?
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 07.01.23 20:10
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Правы ли они?

RAII не про владение, а про инварианты объекта, поэтому да, правы, если заявляют что забирают владение.
Sic luceat lux!
Re[3]: Нарушение ли это принципа RAII?
От: Skorodum Россия  
Дата: 11.01.23 09:23
Оценка: 1 (1)
Здравствуйте, Shmj, Вы писали:

S>Но кто выделяет память в куче для объекта QGraphicsEffect?

"Пользователь" этого класса
1. Создаешь
2. Настраиваешь свойства, подсоединяешь сигнала-слоты
3. Передаешь владельцу.

Если есть вероятность выброса исключений на шаге 2, то можно использовать умные указатели и RAII:
Пример:
auto data = std::unique_ptr<QSurfaceDataArray>(new QSurfaceDataArray);
// do something with data
...
// transfer ownership
m_powerSeries->dataProxy()->resetArray(data.release());
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.