Удалить указатель на структуру - PullRequest
1 голос
/ 13 октября 2010

один из файлов cpp имеет структурный указатель, созданный с помощью оператора «new».Должен ли этот указатель быть явно удален?Или указатель автоматически удаляется?

Ответы [ 4 ]

7 голосов
/ 13 октября 2010

C ++ (обычно) не имеет автоматического управления памятью. Чтобы освободить память этого объекта, вы должны использовать delete . Когда использовать, это другой вопрос.

РЕДАКТИРОВАТЬ: Кроме того, указатель будет удален (или будет перезаписан в стеке), когда функция вернется, но объект , на который указывает 1010 *, останется в куче до удалить it.

1 голос
/ 13 октября 2010

Если вы ищете более простое управление памятью, вы можете посмотреть на Shared Pointers . Это удобный способ заверить вас, что память будет освобождена, если использовать ее правильно.

1 голос
/ 13 октября 2010

Как отмечает @Jared Updike, вы должны сделать это самостоятельно. Это одна из причин, почему умные указатели, такие как в Boost и C ++ 0x, так широко используются - это легковесные классы, которые управляют базовым необработанным указателем памяти, чтобы избежать утечек памяти, когда (не если) вы забудете delete или delete[] сырых указателей.

Если вы новичок в C ++, сделайте себе одолжение и взгляните на эти (scoped_ptr, shared_ptr и т. Д.).

1 голос
/ 13 октября 2010

Использование ключевого слова «new» будет выделять память в куче, так же, как «malloc» в C. Чтобы вернуть эту память, когда вы закончили ее использовать, вы должны сделать «delete» вуказатель, возвращаемый из 'new'.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...