В составе библиотеки разработчиков 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 ++?