Существует ли руководство по управлению памятью для c ++, как у Apple для цели c? - PullRequest
2 голосов
/ 03 декабря 2011

В составе библиотеки разработчиков Mac OS X есть очень хорошее руководство по управлению памятью для цели c .Он не только описывает, что делают различные функции управления памятью (например, retain, autorelease и dealloc), но и когда использует каждый метод.

Например, он имеет следующие рекомендации по освобождениюпамять:

  • Вы не должны отказываться от права собственности на объект, которым вы не владеете
  • Когда он вам больше не нужен, вы должны отказаться от права собственности на принадлежащий вам объект
  • Вы можете стать владельцем объекта, используя команду retain

Затем он предоставляет подробную информацию об этих правилах, например,

Вы создаете объект, используя метод, имя которого начинается с «alloc», «new», «copy» или «mutableCopy» (например, alloc, newObject или mutableCopy).

Благодаря этим рекомендациям люди, использующие ваш код, могут легко узнать, когда они ожидают, что retain или release объекты будут возвращены из методов и когда в этом нет необходимости.

Также руководство написано людьми с многолетним опытом работы с целью c.Таким образом, в подавляющем большинстве случаев следование рекомендациям по управлению памятью даст лучший код, чем создание руководств по управлению памятью самостоятельно.


Из-за этих преимуществ мне было интересно, есть ли где-нибудь подобное руководство дляC ++.Существует множество способов передать или вернуть объект методу в c ++:

  • по ссылке
  • по значению
  • по указателю
  • по boost::shared_ptr (или другим умным указателям)
  • постоянным вариантам вышеуказанных методов

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

Если бы у меня былруководство по управлению памятью для c ++, как и руководство по работе с c, было бы намного проще.Так есть ли на сайте или опубликованы в книге?Кроме того, существует ли ряд рекомендаций, которым следуют большинство разработчиков c ++?

1 Ответ

2 голосов
/ 03 декабря 2011

Разница в том, что для Objective C вам предоставляется соглашение, которое используется в стандартной библиотеке и также используется практически в каждой программе для этой платформы.

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

Более или менее похоже на проблемы с оборудованиемпроще в подходе Apple, потому что нет разнообразия.Это спорный вопрос, если это разнообразие является важным ресурсом стоит бороться прилагаемой сложности или просто бессмысленные осложнениями.

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