はい、そうしなければなりません。boost::optional
はコピーを格納するため、 のshared_ptr
場合、これは のコピーがあるshared_ptr
ことを意味し、参照カウントを増やす必要があることを意味します。
が空である限りboost::optional
、つまり の値を含まない限りshared_ptr
、参照カウントが変更されるオブジェクトは存在しないことに注意してください。つまり、空には(空またはその他) が含まれboost::optional
ませんshared_ptr
。
要求された「セマンティクス」は実際には機能しません。shared_ptr
マップにセマンティクスを保持し、shared_ptr
.
ただし、次を返す場合がありますboost::optional<const V&>
。
boost::optional<const V&> findValue(const K& key) {
auto it = map.find(key);
if (it != map.end()) {
return boost::optional<const V&>( it->second );
}
return boost::optional<const V&>();
}
ただし、参照を保持/使用している間は参照が有効であることを確認してください。