shared_ptr <Derived>をshared_ptr <Base>として渡す
shared_ptr派生型shared_ptrのaを基本型のaを取る関数に渡すための最良の方法は何ですか? shared_ptr不必要なコピーを避けるために、私は通常、参照によってsを渡します。 int foo(const shared_ptr<bar>& ptr); しかし、私が次のようなことをしようとすると、これは機能しません int foo(const shared_ptr<Base>& ptr); ... shared_ptr<Derived> bar = make_shared<Derived>(); foo(bar); 使用できます foo(dynamic_pointer_cast<Base, Derived>(bar)); しかし、これは2つの理由で最適ではないようです。 Aはdynamic_cast、単純なため、過剰なビットが得ツーベースキャストようです。 私が理解しているdynamic_pointer_castように、関数に渡すポインターのコピー(一時的なものではありますが)を作成します。 より良い解決策はありますか? 後世のための更新: ヘッダーファイルがないという問題であることが判明しました。また、ここで私がやろうとしていたことは、アンチパターンと見なされます。一般的に、 オブジェクトの存続期間に影響を与えない(つまり、オブジェクトが関数の期間中有効である)関数は、単純な参照またはポインターを使用する必要がありますint foo(bar& b)。 オブジェクトを消費する関数(つまり、特定のオブジェクトの最終ユーザー)は、unique_ptrby値を取る必要がありますint foo(unique_ptr<bar> b)。呼び出し元はstd::move、関数に値を入力する必要があります。 オブジェクトの存続期間を延長する関数はshared_ptr、値をとる必要がありますint foo(shared_ptr<bar> b)。循環参照を避けるための通常のアドバイスが適用されます。 詳細については、ハーブサッターの「基本に立ち返る」の話を参照してください。