Динамическая память в Win32 api

Почему в Win32 не используется динамическая память при создании элементов?

Например, в Qt кнопка создаётся так:

QPushButton button = new QPushButton(this);

В Win32 делается это так:

HWND hwndButton = CreateWindow(...);

Это нормально? Стек не перегрузится? Можно ли создавать элементы, используя динамическую память?


Ответы (1 шт):

Автор решения: ESkri

В Win32 объекты интерфейса (окна, кнопки и т.д.) являются системными объектами, т.е., владелец памяти, занятой этими объектами - ОС, а не процесс пользователя.
Поэтому при создании объекта пользователь получает целое число - handle объекта (индекс во внутреннем виндовом массиве всех созданных объектов интерфейса), а не ссылку. Конечно, там используется динамическая память, но пользователь не видит реальных адресов этих объектов.

Для чего так сделано? Ну, например, чтобы винда, выполняя работу с этими объектами (напр, перерисовка экрана), не наткнулась на ситуацию, когда пользователь что-то нехорошее с этой памятью сделал (освободил или перезаписал мусором). То есть, чтобы гарантировать по возможности безошибочную работу подсистемы ГУЙ вне зависимости от багов в гуёвых приложениях. (Нет, в слове "гуёвых" нет опечатки)

→ Ссылка