クラスにいくつかのコンテナーがあります。たとえば、ヒープ上に存在するオブジェクトへの shared_ptr を含むベクターまたはマップです。
例えば
template <typename T>
class MyExample
{
public:
private:
vector<shared_ptr<T> > vec_;
map<shared_ptr<T>, int> map_;
};
shared_ptr<const T>このクラスのパブリック インターフェイスを使用して、( を介して) shared_ptrs を const オブジェクトに返すこともあれshared_ptr<T>ば、呼び出し元がオブジェクトを変更できるようにすることもあります。
論理的な const の正確性が必要なので、メソッドを const としてマークすると、ヒープ上のオブジェクトを変更できません。
質問:
1) と の交換可能性に混乱していshared_ptr<const T>ますshared_ptr<T>。誰かがshared_ptr<const T>クラスに a を渡した場合、私は次のことを行いますか?
- コンテナとして保管するか、
shared_ptr<T>それともshared_ptr<const T>コンテナ内に保管しますか? - また
- マップ、ベクター タイプ (insert_element(
shared_ptr<const T>obj) など) を変更しますか?
2) 次のようにクラスをインスタンス化する方が良いMyExample<const int>ですか? shared_ptr<int>?を返すことはできないため、これは過度に制限されているように思えます。