Tengo algunos contenedores en una clase, por ejemplo, vector o mapa que contienen shared_ptr's a objetos que viven en el montón.C++ puntero inteligente const correctness
Por ejemplo
template <typename T>
class MyExample
{
public:
private:
vector<tr1::shared_ptr<T> > vec;
map<tr1::shared_ptr<T> , int> h;
};
Quiero tener una interfaz pública de esta clase que devuelve a veces shared_ptrs a const objetos (a través de shared_ptr<const T>
) y, a veces shared_ptr<T>
donde que permiten la persona que llama para mutar los objetos. Quiero corrección lógica const, por lo que si marcó un método como const, no puede cambiar los objetos en el montón.
Preguntas:
1) Estoy confundido por la intercambiabilidad de tr1::shared_ptr<const T>
y tr1::shared_ptr<T>
. Cuando alguien pasa un shared_ptr shared_ptr<const T>
en la clase, puedo almacenar como un shared_ptr<T>
o shared_ptr<const T>
dentro del vector y correspondencia o puedo cambiar el mapa, tipos de vectores (por ejemplo insert_elemeent (shared_ptr<const T>
obj)?
2) ¿Es mejor instanciar las clases de la siguiente manera: MyExample<const int>
? Eso parece indebidamente restrictivo, porque nunca puedo devolver un shared_ptr<int>
?
"l-value." ¡No es necesario asignar un valor l! – curiousguy