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
#include
/* 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);
}