내 질문에 내 인터페이스에서 boost :: shared_ptr을 사용하고 내 인터페이스에서 원시 포인터 또는 참조를 노출해야하는지 여부를 묻는 질문에 대한 답을 드리겠습니다.에 관한 혼란 boost :: shared_ptr
는 Employeer이있는 사람의 경우를 생각해 보자. 직원은 내부적으로 모든 직원을 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이 삭제되어 내 참조가 무효화 될 위험이 있습니까?
예를 들어 내 new question을 참조하십시오.
Employeer 예제는 당시 내가 제시 할 수있는 최상의 예였습니다. shared_ptrs를 사용하는 실제 클래스에는 실제로 해당 기능이 필요합니다. 감사! – JnBrymn
아, 나는 당신이 그 기능을 필요로한다고 당신을 믿는다; 왜 다른 이유가있을 수 있습니다, 그리고 당신이 다른 디자인 결정을 내릴 때 고려해야합니다 :) –