私の質問から、boost :: shared_ptrの使用方法を私のインターフェイスから暴露する必要があるかどうか、そして私のインターフェイスから未処理のポインタや参照を公開する必要があるかどうかについて質問します。混乱についてboost :: shared_ptr
人の場合、の従業員があるとします。 従業員は内部ですべての従業員をvector< shared_ptr<Person> >
に管理しています。このため、ベスト・プラクティスでは、Personに関係するインタフェースはすべてshared_ptrラップされた人である必要がありますか?私は後で代わりにブースト様々なjohns_very_own_shared_ptr使用するための実装を変更したい場合は
void Employeer::hireByCopy(Person p);
void Employeer::hireByRef(Person& p);
void Employeer::hireByRawPtr(Person* p);
void Employeer::hireBySharedPtr(shared_ptr<Person> p);
:
Person Employeer::getPresidentCopy();
Person& Employeer::getPresidentRef();
Person* Employeer::getPresidentRawPtr();
shared_ptr<Person> Employeer::getPresidentSharedPtr();
または、例えば:例えば、全部またはこれらOKの一部だけ
をしています、私は古い実装に閉じ込められていますか?
一方、私はインターフェイスから未加工のポインタや参照を公開すると、shared_ptrの下からメモリを削除してしまう人がいるのですか?あるいは、shared_ptrが削除され、私の参照が無効になる危険性がありますか?
これを含む例については、new questionを参照してください。
従業員の例は、私が当時考え出した最良の例でした。 shared_ptrsを使用している実際のクラスには、実際にその機能が必要です。ありがとう! – JnBrymn
ああ、私はあなたがその機能を必要としていることを完全に信じています。なぜあなたがそうすることができるか、そしてあなたが他の設計上の決定を下すときに考慮すべき異なる理由があります:) –