Есть ли жесткая рекомендация относительно того, когда следует использовать boost :: shared_ptr над обычным указателем (T *) и наоборот?Рекомендации по использованию: общие или обычные указатели
ответ
Мое общее правило: когда память проходит много, и трудно сказать, что принадлежит этой памяти, следует использовать общие указатели. (Обратите внимание, что это также может указывать на плохой дизайн, поэтому подумайте о вещах, прежде чем перейти к общим указателям.) Если вы используете общие указатели в одном месте, вы должны попытаться использовать их повсюду. Если вы этого не сделаете, вам нужно быть очень осторожным в том, как вы проходите вокруг указателей, чтобы избежать двойных освобождений.
Если ваше использование памяти прост и очевидно, что принадлежит памяти, то просто используйте обычные указатели.
Как правило, чем больше ваш проект, тем больше пользы вы получите от общих указателей. В этом нет жестких правил, и их не должно быть. Как и во многих решениях по развитию, есть компромиссы, и вы должны делать то, что лучше для вас.
Мое правило в том, что если трудно сказать «что принадлежит этой памяти», у вас плохой дизайн. Применение общей помощи указателя не будет исправлять. – 2009-08-11 16:12:42
@NNeil, делая явное указание указателя не имеет ничего общего с дизайном. –
@jon, наряду с пожизненным временем, является одной из двух наиболее важных проблем, которые должен решить любой дизайн: – 2009-08-11 19:41:11
Простое руководство, что почти исключает возможность памяти утечек: всегда использовать именованный смарт переменную указатель удерживать результат новый.
, если вас беспокоит утечка памяти с помощью нового, вы можете использовать 'auto_ptr' и не иметь накладных расходов на' shared_ptr'. –
Пока ничего не знаешь, делится указателем с создающим объектом. –
Нестандартная семантика копии auto_ptr может сильно вас укусить, если вы не будете осторожны. –
Если вы не строите смарт-указатель (не), то вы должны, вероятно, не используя RAW указатель (Это путь ведет к безумию).
Есть множество умных указателей для различных ситуаций:
станда :: auto_ptr:
станда :: tr1 :: shared_ptr AKA (повышение :: shared_ptr)
повышения :: scoped_ptr
повышения :: weak_ptr
Smart Pointers: Or who owns you baby?
Единственная причина для передачи указателя является передать ссылку на объект, который потенциально может быть NULL (в противном случае используйте ссылку), то есть вы НЕ передавая право собственности только на использование объекта (и если вы передаете NULL, возможно, вам стоит посмотреть на код и спросить, почему).
БППП контейнеры не обрабатывают ссылки хорошо, так что вы можете поместить указатели на объекты, принадлежащие кому-то еще в стандартном контейнере (см Using abstract class as a template type)
- 1. Рекомендации по использованию в C
- 2. Шов Рекомендации по использованию
- 3. Рекомендации по использованию какао
- 4. Рекомендации по использованию Guice
- 5. Рекомендации по использованию
- 6. Рекомендации по использованию Sitecore
- 7. Рекомендации по использованию DataSet?
- 8. Рекомендации по использованию таймеров
- 9. Рекомендации по использованию drawRect
- 10. Рекомендации по использованию блокировки
- 11. Рекомендации по использованию инструмента
- 12. Рекомендации по использованию ZeroMQ
- 13. рекомендации по использованию __builtin_expect
- 14. Рекомендации по использованию контейнеров
- 15. Рекомендации по использованию Behat
- 16. Рекомендации по использованию ServerCertificateValidationCallback
- 17. Рекомендации по использованию Terraform
- 18. Рекомендации по использованию языка
- 19. Рекомендации по использованию EditText
- 20. Рекомендации по использованию PyLint?
- 21. Рекомендации по использованию ASP.net WebForms или MVC
- 22. Рекомендации по использованию Rails - контроллер или модель?
- 23. Рекомендации по использованию @ in C#
- 24. Рекомендации по использованию реестра Windows
- 25. Статические (общие в VB.NET) или обычные методы
- 26. Стратегия/рекомендации по использованию CFPARAM
- 27. Рекомендации по использованию ассоциаций Ecto
- 28. Рекомендации по использованию PHP filter_var
- 29. Рекомендации по использованию почтового ящика?
- 30. Рекомендации по использованию REST API
Вы имеете в виду 'повышающего :: shared_ptr' и' станд :: tr1 :: shared_ptr'? – bdonlan
Вы никогда не должны использовать указатель RAW. Но это несколько общих указателей для разных ситуаций. См. Http://stackoverflow.com/questions/94227/smart-pointers-or-who-owns-you-baby –