J'ai quelques conteneurs dans une classe, par exemple, vecteur ou carte qui contiennent shared_ptr aux objets vivant sur le tas.C++ pointeur intelligent const correct
Par exemple
template <typename T>
class MyExample
{
public:
private:
vector<tr1::shared_ptr<T> > vec;
map<tr1::shared_ptr<T> , int> h;
};
Je veux avoir une interface publique de cette classe qui retourne parfois shared_ptrs à Const objets (via shared_ptr<const T>
) et parfois shared_ptr<T>
où je permettre à l'appelant de muter les objets. Je veux l'exactitude logique const, donc si je marque une méthode comme const, il ne peut pas changer les objets sur le tas.
Questions:
1) Je suis confus par l'interchangeabilité des tr1::shared_ptr<const T>
et tr1::shared_ptr<T>
. Quand quelqu'un passe un shared_ptr<const T>
shared_ptr dans la classe, ce que je stocke comme un shared_ptr<T>
ou shared_ptr<const T>
à l'intérieur du vecteur et carte ou changer la carte, types de vecteurs (par exemple insert_elemeent (shared_ptr<const T>
obj)?
2) Est-il mieux instancier les classes comme suit: MyExample<const int>
? Cela semble trop restrictif, parce que je ne peux jamais retourner un shared_ptr<int>
?
"l-value". Une valeur l n'a pas besoin d'être assignable! – curiousguy