Я следую следующим указаниям для передачи аргументов указателей в функции и возврата указателей:
boost::shared_ptr
API и клиент разделяют права собственности на этот объект. Однако вы должны быть осторожны, чтобы избежать циклических ссылок с shared_ptr
, если объекты представляют собой какой-то график. По этой причине я пытаюсь ограничить использование shared_ptr
.
boost::weak_ptr / raw pointer
API владеет этим объектом, вам разрешено делиться им, пока он действителен. Если есть шанс, что клиент будет жить дольше, чем API, я использую слабый_птр.
std::auto_ptr
API создает объект, но клиенту принадлежит объект. Это гарантирует, что возвращаемый код безопасен для исключений, и четко указывает, что право собственности передается.
boost::scoped_ptr
Для указателей на объекты, хранящиеся в стеке или в качестве переменных членов класса. Сначала я пытаюсь использовать scoped_ptr
.
Как и во всех руководящих принципах, будут времена, когда правила вступают в противоречие или должны быть согнуты, тогда я пытаюсь использовать интеллект.