Я предпочитаю капитализированное .NET
типы (а не псевдонимы) для форматирования причин. .NET
типы окрашены тем же как другими типами объектов (типы значения являются надлежащими объектами, в конце концов).
Условное выражение и ключевые слова управления (как if
, switch
, и return
) являются нижним регистром и окрашенным темно-синим (по умолчанию). И у меня не было бы разногласия используемым и формат.
Рассмотрите:
String someString;
string anotherString;
Нет, функция addWidget ()
сохранит право собственности на виджет. Затем он уничтожит принадлежащие ему виджеты.
Кроме того, вы можете прочитать здесь , что:
Как и в случае с QObjects, QWidgets могут быть созданы с родительскими объектами для указать право собственности, гарантируя, что объекты будут удалены, когда они не дольше использовал. С виджетами эти родительско-дочерние отношения имеют дополнительное значение: каждый дочерний виджет отображается на экране область, занятая его родительским виджетом. Это означает, что при удалении оконного виджета, все дочерние виджеты, которые он содержит, также удаляются.
Если возникает исключение между new и addWidget, то да, это утечка памяти. В противном случае родительский элемент управления становится владельцем памяти.
QHBoxLayout *buttonLayout = new QHBoxLayout(); // Memory leak?
//make sure you don't throw here
buttonLayout->addWidget(sendButton);
В дополнение к правильному ответу Клайма:
Я бы сохранил эти указатели в std :: auto_ptr
, а вы тем временем передаете их их родителю.
std::auto_ptr<QHBoxLayout> buttonLayout( new QHBoxLayout() );
// make things which could throw...
layout->addLayout(buttonLayout.release());
Это так вы точно не будете протекать.