'std::auto_ptr<_Ty>' : no copy constructor available or copy constructor is declared 'explicit'



  • Hallo,

    ich verstehe folgende Compilermeldung nicht. In einem Konstruktor will ich folgenden resize durchführen:

    clusters.resize(width / Cluster::ClusterSize);
    
    'std::auto_ptr<_Ty>' : no copy constructor available or copy constructor is declared 'explicit'
    

    Die Definition von 'clusters' ist:

    std::vector< std::vector< std::auto_ptr<Cluster> > > clusters;
    

    Nach meinem Verständnis muss er also Instanzen std::vector< std::auto_ptr<Cluster> > per default-ctor konstruieren. Was übrigens alleine kein Problem ist:

    std::vector< std::auto_ptr<Cluster> > bla; // compiliert
    

    Wie erklärt sich die Fehlermeldung? Cluster ist übrigens noncopyable, aber ich verstehe nicht, warum er nicht die auto_ptr übernehmen (zuweisen?) kann. Muss ich jetzt auf normale Pointer zurückgreifen?


  • Mod

    auto_ptr sind nicht CopyConstructible und Assignable im Sinne der Standardbibliothek und können deshalb nicht Elemente von Containern sein. Ehrlich gesagt überrascht mich die Frage bei deiner Dauer der Boardmitgliedschaft ein wenig. Rohe Zeiger sind ersatzweise möglich aber suboptimal, shared_ptr bieten sich an oder gleich ptr_container (falls du sowieso boost einsetzt).



  • Danke. Ich habe ein paar Jahre C++ - Pause hinter mir, da ich sowohl beruflich als auch im Studium nur mit anderen Sprachen gearbeitet habe. Ich war dem Irrtum aufgesessen, dass der vector beim resize den assignment operator benutzt um die alten Elemente zu übernehmen, den der auto_ptr ja hat. Ist aber jetzt schon klar, dass es nicht so ist.



  • auto_ptr hat auch einen CopyCTor. Der erfüllte aber nicht die Bedingungen nach 20.1.3 .


Anmelden zum Antworten