Вопрос

Почему для wxWidgets нужно говорить:

MyFrame *frame = new MyFrame

вместо:

MyFrame frame;

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top