«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Создание экземпляра объекта C++: стек или куча: «новый» или не «новый»?

Создание экземпляра объекта C++: стек или куча: «новый» или не «новый»?

Опубликовано 21 декабря 2024 г.
Просматривать:960

C   Object Instantiation:  Stack vs. Heap: `new` or Not `new`?

Создание экземпляров объектов: с созданием или без него

При создании объектов на C программисты могут использовать либо оператор «new», либо создавать их экземпляры напрямую без этого. Хотя оба подхода создают объекты, они различаются в нескольких ключевых аспектах.

Без нового

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

Например:

Time t(12, 0, 0); // t is a Time object

В приведенном выше коде объект «Time» «t» создается в стеке, и его время жизни привязано к текущей области действия.

С New

Использование «new» для создания экземпляра объекта динамически выделяет для него память в куче. Это позволяет явно создавать и уничтожать объект по окончании срока его службы. Указатель «t» хранит адрес кучи объекта.

Например:

Time* t = new Time(12, 0, 0); // t is a pointer to a dynamically allocated Time object

Здесь указателю «t» присваивается адрес кучи вновь созданного объекта «Time». Время жизни объекта не зависит от области действия и сохраняется до тех пор, пока оператор «удалить» не будет использован для освобождения его памяти.

Ключевые различия

  • Выделение памяти : Объекты, созданные без «нового», выделяют память в стеке, а «новый» выделяет память в стеке. куча.
  • Срок жизни: Объекты, созданные без слова "new", имеют автоматическое время жизни, тогда как объекты, созданные с помощью "нового", имеют динамическое время жизни и должны быть удалены вручную.

Важно отметить, что эти различия зависят от реализации, поскольку стандарт C не определяет явно поведение стека и кучи. Однако в большинстве практических реализаций стековая память используется для автоматических объектов, а динамическая память — для динамических объектов.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3