Когда я должен использовать новое ключевое слово в C ++? - PullRequest
254 голосов
/ 17 марта 2009

Я давно пользуюсь C ++, и меня интересует ключевое слово new . Просто я должен использовать это или нет?

1) С ключевым словом new ...

MyClass* myClass = new MyClass();
myClass->MyField = "Hello world!";

2) Без ключевого слова new ...

MyClass myClass;
myClass.MyField = "Hello world!";

С точки зрения реализации, они не кажутся такими уж разными (но я уверен, что это так) ... Однако мой основной язык - C #, и, конечно, я привык к 1-му методу.

Сложность заключается в том, что метод 1 сложнее использовать с классами std C ++.

Какой метод я должен использовать?

Обновление 1:

Недавно я использовал ключевое слово new для heap memory (или free store ) для большого массива, который выходил из области видимости (т.е. возвращался из функция). Если раньше я использовал стек, что приводило к повреждению половины элементов вне области видимости, переключение на использование кучи гарантировало, что элементы были в такте. Ура!

Обновление 2:

Мой друг недавно сказал мне, что есть простое правило для использования ключевого слова new; каждый раз, когда вы набираете new, введите delete.

Foobar *foobar = new Foobar();
delete foobar; // TODO: Move this to the right place.

Это помогает предотвратить утечки памяти, поскольку вы всегда должны куда-то помещать удаление (т. Е. Когда вы вырезаете и вставляете его либо в деструктор, либо в другое место).

Ответы [ 11 ]

0 голосов
/ 17 марта 2009

Короткий ответ: да, ключевое слово "new" невероятно важно, так как при его использовании данные объекта сохраняются в куче, а не в стеке, что наиболее важно!

...