Intelligenter Vector für Zeiger?



  • Hallo zusammen.

    Gibt es einen "intelligenten" vektor, der Zeiger speichert und bei erase automatisch löscht?

    Wäre schön, wenns den unter std:: gibt, meinetwegen auch in std::tr1::, oder zur not auch bei boost:: oder qt (ich glaube bei QVector gibts setAutoDelete, aber benutze gerade kein QT, std:: wäre schon am besten...).

    In Stroustrups buch wurde was von nem vector_ref erwähnt, hab den aber nicht gefunden, ich glaube den hatte er selbst geschrieben.





  • thx!

    std hat nix? 😞

    Oder wie wärs wenn man

    std::vector<std::auto_ptr<T> > nimmt?

    beim kopieren von auto_ptr wird ja der "Besitz" übertragen, also sollte das hinzufügen gehen, obwohl ich mal gelesen hab, dass es nicht geht.
    Eine Begründung, waurm es nicht geht wäre nice 🙂

    ansonsten sollte doch

    std::vector<std::tr1::shared_ptr<T> > aber gehen, oder?



  • Ein auto_ptr kann soweit ich weiß nicht in einem Container gespeichert werden. Ein shared_ptr wäre übertrieben. Nimm nen unique_ptr.



  • Schau dir doch mal Boost an, diese Bibliothekssammlung enthält enorm viele nützliche Funktionalität. Boost ist vielen C++-Programmierern ein Begriff, ein Teil davon fliesst auch in zukünftige Standardbibliotheken ein.

    auto_ptr geht nicht mit STL-Containern und shared_ptr ist meist Overkill, weil man gar nichts teilen will. unique_ptr ist ab C++0x eine Möglichkeit, allerdings kannst du diesen Smart-Pointer nicht kopieren. Wenn du einfach nur besitzende Zeiger in Containern brauchst (z.B. für Polymorphie), nimm Boosts Pointer-Container.


Anmelden zum Antworten