Difference between smart pointer and raw pointer in c++

Diese kleine Demonstration zeigt den Unterschied, wie man die sogenannten Smartpointer in c++ benutzt. Die klugen Zeiger sorgen dafür, dass zuvor reservierter Speicher automatisch freigegeben wird, sobald diese Zeiger nicht mehr benötigt werden. Ein interner Zähler zählt die Anzahl der Referenzen. Wird der Wert 0 erreicht, so wird der Speicher freigegeben.

This small c++ application shows the difference between using smartpointer and raw pointer. Smartpointer frees memory automatically when this pointer is not needed anymore.

#include <iostream>
#include <memory>

/* raw pointer, the legacy way */
std::string* createRawPointer(const std::string &data){
    return new std::string(data);
}

void doSomethingWithRawPointer(std::string &raw){
    raw.append(" NEW DATA");
}

void deleteRawPointer(std::string *raw){
    delete raw;
}

/* smart pointer, the modern way to wrap a raw pointer */
std::unique_ptr<std::string> createSmartPointer(const std::string &data){
    return std::unique_ptr<std::string>(new std::string(data));
}

void doSomethingWithSmartPointer(std::unique_ptr<std::string> &smart){
    std::string *content = smart.get();
    content->append(" NEW DATA");
}

void deleteSmartPointer(std::unique_ptr<std::string> &smart){
    /* no action required to delete */
}

int main(){
    /* raw pointer example */
    std::string data = "Raw data";
    std::string *rawpointer = createRawPointer(data);
    std::cout << "before " << *rawpointer << '\n';
    doSomethingWithRawPointer(*rawpointer);
    std::cout << "after " << *rawpointer << '\n';
    deleteRawPointer(rawpointer);

    /* smart pointer example */
    data = "Smart data";
    std::unique_ptr<std::string> smart = createSmartPointer(data);
    std::cout << "before " << *smart.get() << '\n';
    doSomethingWithSmartPointer(smart);
    std::cout << "after " << *smart.get() << '\n';
    deleteSmartPointer(smart);
}

cpp_pointer.png



0
0
0.000
10 comments
avatar

mit wieviel Sprachen hantierst du eigentlich grad gleichzeitig?

0
0
0.000
avatar

Ich werde mit Java, c++, c#, Python, Javascript, Typescript und React konfrontiert. Je nachdem was gerade so beruflich verlangt wird. Natürlich kann ich keine dieser Sprachen perfekt, also ich bin kein Sheldon😂.

0
0
0.000
avatar

wie lange hast du gebraucht, um dir dieses Wissen anzueignen?

0
0
0.000
avatar

Ich würde sagen so ungefähr 4 bis 5 Jahre.

0
0
0.000
avatar
(Edited)

ok. spannend.
Bei mir sind es jetzt entweder 3 Monate, wo ich angefangen habe, das ernst zu betreiben.
Oder auch weit über 20 Jahre, wo ich irgendwelche Anläufe genommen habe.

Ich hoffe halt, dass auf Dauer, immer ein wenig mehr hängen bleibt. Also bei dem, wie sehr ich mich in letzter Zeit, damit auseiander setze. Momentan versuche ich es mit w3c, obwohl das Englisch ist und mir schwer fällt. Dafür erklären die Tutorials extrem einfach, um was es geht.


Ich war jetzt neugierig, und hab nach alten Büchern geguckt, die ich damals verwendet habe.

https://www.medimops.de/monadjemi-c-jetzt-lerne-ich-der-einfache-einstieg-in-ansi-c-mit-vielen-beispielen-broschiert-M03827253616.html?variant=UsedGood&creative=&sitelink=&gclid=Cj0KCQjwgNanBhDUARIsAAeIcAu-zOwTu25cBJM4dD9xdboEQ4pv8SM_wrH85eSIMXIHwruj-RQeyzsaAm6bEALw_wcB

Das ist von 1997

und das hier von 2004

https://www.medimops.de/davis-stephen-r-c-fuer-dummies-taschenbuch-M03527701729.html?variant=UsedVeryGood&creative=&sitelink=&gclid=Cj0KCQjwgNanBhDUARIsAAeIcAuYSqsnpn6UiBGyWeOjxN0FGc8YdQLV1r2eyWP-OOirH7QDgb1khZAaAoaWEALw_wcB

und mir ist eingefallen, dass ich damals schon Schwierigkeiten hatte, den Sinn von Zeigern zu verstehen.

0
0
0.000