ホームページ  >  記事  >  バックエンド開発  >  「shared_ptr」を値または参照で渡す必要がありますか?

「shared_ptr」を値または参照で渡す必要がありますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-31 14:24:02109ブラウズ

Should I Pass `shared_ptr` by Value or by Reference?

シェアード ポインターの受け渡し: 参照または値による

shared_ptr (boost または C 11 STL から) を関数に渡すとき、 const 参照 (void foo(constshared_ptr& p)) によって渡すか、値によって渡すか (void foo(shared_ptr p)) のどちらを選択するかが議論の的となってきました。

伝統的に、参照による受け渡しのほうが、不必要なコピー操作を回避できるため高速になると考えられていました。ただし、C and Beyond 2011 で専門家 (Scott、Andrei、Herb) が議論したように、これはもう当てはまりません。

値渡しか参照渡しか?

オブジェクトの所有権を明示的に共有する必要がない限り (データ構造間またはスレッド間など)、shared_ptr を値で渡す説得力のある理由はありません。 const 参照による受け渡しは、次の理由から推奨されます:

  • パフォーマンス: 通常、const 参照による受け渡しは、特に大きなオブジェクトの場合、shared_ptr を値でコピーするより高速です。これは、オブジェクト全体ではなく、ポインター自体のみが渡されるためです。
  • 正確性: const 参照によって渡すことで、関数内でshared_ptrを変更できないことが保証されます。これは、共有オブジェクトへの誤った変更を防ぐのに役立ちます。

値で渡す場合

shared_ptr を値で渡すことをお勧めするのは、次の場合のみです。目的は、オブジェクトの所有権を関数に譲渡することです。これは通常、関数がオブジェクトの有効期間を管理する必要がある場合に当てはまります。

追加の考慮事項

最適なパフォーマンスを得るには、shared_ptr が有効かどうかを考慮することが重要です。移動を最適化することができます。 Scott Meyers が説明したように、移動の最適化により、不必要なコピー操作の必要性を排除できます。ただし、この最適化は C の特定のバージョンでのみ使用できます。

以上が「shared_ptr」を値または参照で渡す必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。