Probleme beim Kompilieren mit vectorauto_ptr

7

Betrachten Sie den folgenden Code:

%Vor%

Beim Versuch, es zu kompilieren, bekomme ich den folgenden obskuren Compilerfehler von g ++:

%Vor%

Mir scheint, dass es hier Probleme mit den Problemen gibt. Bedeutet dies, dass auto_ptr nicht in vector s verwendet werden kann?

    
petersohn 15.04.2010, 08:20
quelle

2 Antworten

18

Richtig, std::auto_ptr kann nicht in std::vector verwendet werden.

Worüber der Compiler sich beschwert, ist, dass der Zuweisungsoperator für auto_ptr das zugewiesene Objekt ändert und daher nicht const sein kann.

Sie möchten entweder boost :: ptr_vector oder a Vektor von boost :: shared_ptr s

    
Joel 15.04.2010, 08:30
quelle
5

auto_ptr hat einen Kopierkonstruktor mit einem nichtkonstanten Parameter, daher kann der Compiler ihn nicht von vector::push_back() aufrufen, da letzterer den Parameter const hat.

Der Grund ist, wenn Sie eine auto_ptr Instanz von einer anderen Instanz initialisieren, trennt die neue Instanz das Objekt von der anderen Instanz und verbindet es mit self, also vermeiden Sie eine dangling Pointer Situation wenn eine Instanz delete s das Objekt und die andere noch hält einen Zeiger darauf.

    
sharptooth 15.04.2010 08:38
quelle

Tags und Links