Что особенного в жизни объектов, созданных в функции InitInstance MFC?

Я вижу несколько примеров кода, показывающих переменные и создания объектов внутри InitInstance() функция приложения MFC (т.е. theApp). Я думал, что все, что создано внутри функции, умирает при выходе из функции. И InitInstance Функция, по-видимому, завершается до выхода из программы, сразу после отображения окон.

Что мне не хватает? Как это работает?

1

Решение

Да, вы правы: объекты, созданные в области действия функции с автоматическим хранением, будут автоматически уничтожены, когда функция существует.

Есть два возможных объяснения того, что вы видите (его сложно сузить, так как вы не включили пример кода в свой вопрос):

  1. Объекты на самом деле создаются с использованием new ключевое слово, что означает, что они имеют динамическую продолжительность хранения и не уничтожаются автоматически. Вместо этого они должны быть уничтожены вручную с помощью delete ключевое слово. В дополнение к видению newмертвая распродажа этого стиля — использование указателей —new возвращает указатель на новый объект, так что вы увидите * повсюду.

  2. Объект на самом деле не необходимость существовать дольше, чем функция, в которой он объявлен. Он может быть временно создан только для того, чтобы можно было вызывать некоторые его функции-члены. Эффекты этих функций-членов являются глобальными или имеют последствия вне самого объекта класса. Это довольно распространено в MFC, так как большинство классов являются оболочками вокруг Win32 API.

    Например, CWnd класс — это просто объектно-ориентированная оболочка вокруг окна Win32, представленная HWND (или ручкой к окну). Вы можете создать CWnd объект, используйте его для создания и управления окном Windows (HWND), а затем разрешить его уничтожение без влияния на основное окно Windows. Раздел «Замечания» CWnd документация немного говорит об этом запутанном поведении:

    CWnd Объект отличается от окна Windows, но оба тесно связаны. CWnd объект создан или уничтожен CWnd конструктор и деструктор. Окно Windows, с другой стороны, представляет собой структуру данных, внутреннюю для Windows, которая создается Create функция-член и уничтожена CWnd виртуальный деструктор. DestroyWindow Функция разрушает окно Windows, не разрушая объект.

Вы упомянули вездесущий theApp возражать в вашем вопросе, хотя. Это немного отличается — это на самом деле Глобальный объект, потому что он не объявлен внутри области видимости любой функции. Он автоматически создается, когда программа начинает выполняться, и автоматически уничтожается, когда программа заканчивается.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]