shared_ptr
関数は へのポインタを返す必要がありますStructA
。
struct StructA
{
// complicated struct that also holds other sub-structure
....
};
const boost::shared_ptr<const StructA&>& GetStructA(...)
{...} #0.5
const boost::shared_ptr<const StructA>& GetStructA(...)
{...} #0
const boost::shared_ptr<StructA>& GetStructA(...)
{...} #1
const boost::shared_ptr<StructA> GetStructA(...)
{...} #2
boost::shared_ptr<const StructA>
{...} #3
boost::shared_ptr<StructA> GetStructA(...)
{...} #4
boost::shared_ptr<StructA>& GetStructA(...)
{...} #5
boost::shared_ptr<StructA&> GetStructA(...)
{...} #6
非常に多くの選択肢があり、そのうちの1つが最適であると確信しています(残っている人がいる場合は指摘してください)。
個人的には#0の方が好き
const boost::shared_ptr<const StructA&>& GetStructA(...)
{...} #0
レガシー システムは#2を使用します
const boost::shared_ptr<StructA> GetStructA(...)
{...} #2
#0を選択する理由は次のとおりです。
const shared_ptr を返すため、この関数の呼び出し元は、内部データ構造を指す可能性のある返された shared_ptr を変更しないでください。
参照渡しなので、shared_ptr の参照カウントの +/- を回避できます
shared_ptr は const StructA& を保持しているため、呼び出し元は const shared_ptr の内容を変更できません。私が正しければ、shared_ptr が const であっても、データが const でない限り、呼び出し元がポイントされたデータを変更するのを防ぐことはできません。
お願いします
- 私が間違いを犯した場合は、私の理解を修正してください
- この関数に最適なリターン シグネチャを提供します。
ありがとうございました