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?
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
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.