То, почему QT нужно, выделяет дочерних объектов в "куче"?

Похоже, что Array.flat недоступно в nodejs (v10).

Ах да, только v11 + - см. Таблицу совместимости: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat

6
задан Macke 30 June 2011 в 19:41
поделиться

4 ответа

Я думаю, что идея здесь состоит в том, что QT имеет свою собственную внутреннюю ссылку, рассчитывающую на большинство объектов и если Вы раздаете их, копия на записи использования и т.д.

Вы могли быть более конкретными в своем вопросе?

0
ответ дан 17 December 2019 в 02:34
поделиться

В Вашем примере выход не должен быть выделенной "кучей".

Этот код компилирует и выполняется прекрасный:

struct MyWidget : QWidget 
{
    QPushButton quit;

    MyWidget()
    {
        quit.setGeometry( 62, 40, 75, 30 );
        quit.setFont( QFont( "Times", 18, QFont::Bold ) );
    }
};
5
ответ дан 17 December 2019 в 02:34
поделиться

Если я понимаю то, что Вы спрашиваете правильно, я думаю, что это главным образом сводится к традиции и примеру с определенной добавленной зависимостью заголовка.

Альтернатива, конечно, должна объявить quit как членская переменная MyWidget. Если бы Вы делаете это, то необходимо было бы включать заголовочный файл для QPushButton где MyWidget объявляется, вместо в файле реализации. Пример, который Вы дали также, полагается на родительские отношения QObjects, чтобы отслеживать память для кнопки и удалить его на разрушении, таким образом, это не должно быть указано как участник в классе.

Я вполне уверен, Вы могли измениться на выделение стека, если бы Вы действительно хотели.

2
ответ дан 17 December 2019 в 02:34
поделиться

Что другие опции там? От стека? Как спокойный знал бы, когда выделить от стека и когда от "кучи"? Вещи, выделенные от стека, закончатся, как только текущая функция возвращается, таким образом, время жизни объекта могло быть намного короче, чем время использования. Предположите добавлять узел к дереву. Узел будет использоваться еще долго после того, как текущая функция возвратилась. Это привело бы к доступу к случайной памяти, отказам сегментации, дампам ядра, и т.д.

-1
ответ дан 17 December 2019 в 02:34
поделиться
Другие вопросы по тегам:

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