Сборка мусора в Qt

Рейтинг: 1Ответов: 1Опубликовано: 11.04.2023
    auto data = new QPushBtnCoords(row, column);
    data->setParent(this);

По закрытию главного окна программы (this обозначает указатель на главное окно) я могу быть уверен в том, что будет вызван оператор delete для данных по адресу указателя data?

Ответы

▲ 0

Если вы хотите гарантировать удаление, то используйте умные указатели, как shared_ptr к примеру.

shared_ptr - Этот умный указатель разрешает объекту иметь несколько владельцев, а когда все владельцы уничтожаются, уничтожается и объект. Такое поведение достигается за счёт наличия специального счётчика ссылок внутри std::shared_ptr. Каждый раз, когда такой указатель копируется, счётчик инкрементируется, а когда один из указателей уничтожается – декрементируется. В момент, когда счётчик достигает нуля, объект уничтожается.

Цитата с сайта proglib.io - "https://proglib.io/p/umnye-ukazateli-v-c-2021-08-26";

void CustomRectItem::fkn_problems()
{
    shared_ptr<QGraphicsRectItem>data = make_shared<QGraphicsRectItem>();
    data->setParentItem(this);
}

Вы в Qt, поэтому лучше использовать Qt-шные библиотеки: https://doc.qt.io/qt-6/qshareddatapointer.html