c++11 smart pointer für arrays
-
Gibt es sowas im neuen C++ Standart ?
#include <iostream> #include <memory> using namespace std; class Test { public: Test(); ~Test(); }; Test::Test() { cout << "Constructor" << endl; } Test::~Test() { cout << "Destructor" << endl; } int main() { std::shared_ptr<Test> a(new Test[2]); }Ausbage:
Constructor
Constructor
Destructor
Ich habe Tutorials gesehen in denen so etwas gemacht wird ...
-
struct foo { foo() { std::cout << "constructor\n"; } ~foo() { std::cout << "destructor\n"; } }; int main() { std::unique_ptr<foo[]> p(new foo[5]); }Man beachte das foo[].
-
Danke cooky

-
POINTERTO schrieb:
...
Und merke dir allgemein, das man shared_ptr nur dann verwenden sollte, wenn man wirklich Referenzzählung ("der letzte macht das Licht aus") braucht. Ansonsten bitte immer zu wesentlich schlankeren wir unique_ptr greifen.
shared_ptr hat seinen Sinn, wird aber nicht selten an Stellen verwendet, wo der Overhead unsinnig ist.
-
Was hat ein unique_ptr für einen Vorteil, statt ein vector für ein array?
-
@caincain:
releaseansonsten würde ich auch eher zu array oder vector greifen.
-
caincain schrieb:
Was hat ein unique_ptr für einen Vorteil, statt ein vector für ein array?
Ein vector ist normalerweise 3 pointer groß, ein unique_ptr braucht intern nur 1 pointer.
-
Oder falls man von einem externen API (z.B. aus C) nur den Pointer bekommt und nicht kopieren will. Dann kann man auch einen entsprechenden Deleter einrichten.
Wenn du für dich selbst ein dynamisches Array brauchst, solltest du STL-Container bevorzugen.