wxWidgets используя ключевое слово 'new' - PullRequest
2 голосов
/ 12 мая 2009

Для wxWidgets, почему вы должны сказать:

MyFrame *frame = new MyFrame

вместо:

MyFrame frame;

Какая разница между этими двумя? Второй лучше читать и проще в использовании, но во всех примерах используется первый, поэтому я удивляюсь, в чем причина.

Просто чтобы уточнить, я знаю, что вторая версия не работает, но мне интересно, есть ли конкретное дизайнерское решение, которое приводит к необходимости использовать первую форму вместо второй. ТИА.

Ответы [ 2 ]

3 голосов
/ 12 мая 2009

Первый выделяет новый экземпляр MyFrame в куче и возвращает указатель на него. Второй создает новый экземпляр MyFrame в стеке напрямую.

Причина, по которой вам нужно использовать первый синтаксис, заключается в том, что вы добавите этот кадр (элемент пользовательского интерфейса) в другой элемент пользовательского интерфейса, например в окно. Окно возьмет указатель на фрейм и добавит его как дочерний элемент.

Если вы используете второй синтаксис, вам нужно будет передать указатель на ваш объект стека (& frame), который скомпилируется, но затем, как только ваш метод вернется, вызывается деструктор frame, так как frame выходит из объем. Это «сломает» ссылку внутри вашего окна.

0 голосов
/ 12 мая 2009

Если вы используете 'new', вы выделяете кадр в куче. В противном случае он размещается в стеке и будет удален, когда закончится кадр стека.

...