QT: “новый без удаляют” утечки памяти причины со средствами управления?

Я предпочитаю капитализированное .NET типы (а не псевдонимы) для форматирования причин. .NET типы окрашены тем же как другими типами объектов (типы значения являются надлежащими объектами, в конце концов).

Условное выражение и ключевые слова управления (как if, switch, и return) являются нижним регистром и окрашенным темно-синим (по умолчанию). И у меня не было бы разногласия используемым и формат.

Рассмотрите:

String someString; 
string anotherString; 
16
задан sivabudh 6 January 2012 в 01:27
поделиться

3 ответа

Нет, функция addWidget () сохранит право собственности на виджет. Затем он уничтожит принадлежащие ему виджеты.

Кроме того, вы можете прочитать здесь , что:

Как и в случае с QObjects, QWidgets могут быть созданы с родительскими объектами для указать право собственности, гарантируя, что объекты будут удалены, когда они не дольше использовал. С виджетами эти родительско-дочерние отношения имеют дополнительное значение: каждый дочерний виджет отображается на экране область, занятая его родительским виджетом. Это означает, что при удалении оконного виджета, все дочерние виджеты, которые он содержит, также удаляются.

27
ответ дан 30 November 2019 в 16:30
поделиться

Если возникает исключение между new и addWidget, то да, это утечка памяти. В противном случае родительский элемент управления становится владельцем памяти.

QHBoxLayout *buttonLayout = new QHBoxLayout();  // Memory leak?
//make sure you don't throw here
buttonLayout->addWidget(sendButton);
7
ответ дан 30 November 2019 в 16:30
поделиться

В дополнение к правильному ответу Клайма:

Я бы сохранил эти указатели в std :: auto_ptr , а вы тем временем передаете их их родителю.

std::auto_ptr<QHBoxLayout> buttonLayout( new QHBoxLayout() );
// make things which could throw...
layout->addLayout(buttonLayout.release());

Это так вы точно не будете протекать.

5
ответ дан 30 November 2019 в 16:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: