Мой вопрос вращается вокруг того, должен ли я выставлять свое использование boost :: shared_ptr из моего интерфейса и должен ли я выставлять необработанные указатели или ссылки из моего интерфейса.
Рассмотрим случай с лицом , у которого есть сотрудник . Сотрудник внутренне поддерживает всех своих сотрудников в vector< shared_ptr< Person > >
. Из-за этого передовые практики диктуют, что любой интерфейс с участием Person должен быть обернутым лицом shared_ptr?
Например, все или только некоторые из них в порядке:
Person Employeer::getPresidentCopy();
Person& Employeer::getPresidentRef();
Person* Employeer::getPresidentRawPtr();
shared_ptr<Person> Employeer::getPresidentSharedPtr();
Или, например:
void Employeer::hireByCopy(Person p);
void Employeer::hireByRef(Person& p);
void Employeer::hireByRawPtr(Person* p);
void Employeer::hireBySharedPtr(shared_ptr<Person> p);
Если позже я захочу изменить реализацию на использование johns_very_own_shared_ptr вместо разнообразия надстроек, я пойман в ловушку старой реализации?
С другой стороны, если я предоставляю необработанные указатели или ссылки из интерфейса, могу ли я рисковать тем, что кто-то удалит память из-под shared_ptr? Или я рискую удалить shared_ptr и сделать мою ссылку недействительной?
См. Мой новый вопрос для примера, связанного с этим.