C ++ Smart Pointer const Korrektheit

Ich habe ein paar Container in einer Klasse, zum Beispiel vector oder eine map, die enthalten
shared_ptr - Objekte Leben auf dem heap.

Beispielsweise

template <typename T>
class MyExample
{
public:

private:
 vector<tr1::shared_ptr<T> > vec;
 map<tr1::shared_ptr<T> , int> h;
};

Ich will eine öffentliche Schnittstelle dieser Klasse, manchmal gibt shared_ptrs
const-Objekte (über shared_ptr<const T>) und manchmal shared_ptr<T> wo
Ich lasse die Anrufer zu mutieren die Objekte. Ich will logische const-correctness ist, also, wenn ich mark
eine Methode als const, kann es nicht ändern, die Objekte auf dem heap.

Fragen:

1) ich bin verwirrt durch die Austauschbarkeit von tr1::shared_ptr<const T> und tr1::shared_ptr<T>.
Wenn sich jemand übergibt eine shared_ptr<const T> shared_ptr in die Klasse, Speichere ich es als shared_ptr<T> oder shared_ptr<const T> im inneren der vector und map oder muss ich die Karte wechseln, Vektor-Typen (z.B. insert_elemeent(shared_ptr<const T> obj) ?

2) Ist es besser zu instanziieren-Klassen wie folgt: MyExample<const int> ? Das scheint
zu restriktiv sind, da kann ich nie wieder ein shared_ptr<int> ?

InformationsquelleAutor der Frage user231536 | 2010-01-17

Schreibe einen Kommentar