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);
}
0
0
0.000
mit wieviel Sprachen hantierst du eigentlich grad gleichzeitig?
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😂.
wie lange hast du gebraucht, um dir dieses Wissen anzueignen?
Ich würde sagen so ungefähr 4 bis 5 Jahre.
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.
!BEER
!LOL
!PIZZA
!BBH
@ozelot47! Your Content Is Awesome so I just sent 1 $BBH (Bitcoin Backed Hive) to your account on behalf of @dotwin1981. (1/1)
lolztoken.com
But it was too corny.
Credit: reddit
@ozelot47, I sent you an $LOLZ on behalf of dotwin1981
(9/10)
ENTER @WIN.HIVE'S DAILY DRAW AND WIN HIVE!
$PIZZA slices delivered:
@dotwin1981(3/10) tipped @ozelot47