Практическое использование указателя в C ++ - PullRequest
1 голос
/ 29 июля 2010

Большая часть моего опыта программирования на C ++ была проектами для школы. Таким образом, использование нами внешних библиотек (например, boost) было запрещено или не рекомендуется. Поэтому мы не можем использовать умные указатели, если не хотим писать свои собственные, что обычно выходит за рамки проектов. Мне просто интересно в реальных проектах, сколько управления памятью фактически выполняется вручную?

Полагаю, это неясный вопрос. Мне просто интересно, как обычно осуществляется управление памятью в реальных проектах.

Ответы [ 5 ]

6 голосов
/ 29 июля 2010

В устаревшем коде обычно много ручного управления памятью.Если кто-то не потратил время на его рефакторинг, вы можете найти множество обнаженных новостей и удалений, просто с радостью ожидая утечки.

Я полагаю, что самые последние, хорошо написанные, программы на C ++ обычно используют умныеуказатели, RAII и так далее.Ручное управление памятью подвержено ошибкам.

3 голосов
/ 29 июля 2010

В тех немногих проектах, которым мне не позволили повысить, на одном из них я бросил элементарную умную указку.Используйте сторонние библиотеки.Если колесо есть, не изобретайте его заново.Вы будете более продуктивными и будете тратить меньше времени на утомительное написание кода, уже написанного кем-то другим.

2 голосов
/ 29 июля 2010

Зависит от того, что вы подразумеваете под «управлением памятью».

Очевидно, что строгое определение означает «все время», поскольку автоматические переменные (выделяемые стеком) - это элемент памяти.Вы, вероятно, не предполагали этого.

С другой стороны, есть использование new и delete.Это должно никогда не произойти, но, вероятно, в любом случае происходит в "обычном" C ++.Это плохая практика, неаккуратная и легко решаемая с контейнерами.Можно буквально скопировать и вставить реализацию интеллектуального указателя откуда-нибудь и это можно сделать без предлога.

В середине, в идеале, все "управление" выполняется автоматически с контейнерами.Единственное управление, которое может потребоваться, - это нарушение циклических зависимостей или создание собственных контейнерных классов.

В моих собственных проектах я использую new и delete только когда создаю служебный класс, поэтому мне больше никогда не придется new и delete.После этого я использую new только когда он попадает прямо в какой-то контейнер.

0 голосов
/ 29 июля 2010

Стоит также отметить, что shared_ptr вошел в стандартную библиотеку в 2003 году как std :: tr1 :: shared_ptr. Или, по крайней мере, если он официально отсутствует в библиотеке, он поставляется со всеми компиляторами C ++, которые я недавно использовал.

0 голосов
/ 29 июля 2010

В реальном мире есть и то и другое. Скорее всего, вы увидите больше кода проекта, который не использует умные указатели. Использование новых и удаления является наиболее распространенным.

При этом все больше и больше программистов используют в своих проектах boost и smart указатели, и я видел, как какой-то код был переработан для использования boost :: shared_ptr

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