Smart Pointer in c++: Shared Pointer

avatar

Seit c++11 gibt es die Möglichkeit die sogenannten Raw Pointer als Smart Pointer zu schreiben. Hiermit möchte ich anhand eines kleinen Beispiels zeigen wie Smart Pointer funktionieren.

Ein Smart Pointer ist quasi ein Wrapper der einen Raw Pointer beinhaltet. Zusätzlich haben die Smart Pointer einen Referrenzzähler der angibt, wieoft ein weiterer Smart Pointer auf dieselbe Ressource zeigt. Hat der Referrenzzähler den Wert 0 erreicht, so kann der Smart Pointer bedenkenlos gelöscht werden, da keine weiteren Smart Pointer auf dieselbe Ressource zeigen. Dies geschieht automatisch. Der Nutzer muss sich nicht darum kümmern was bei einem Raw Pointer der Fall wäre.

Es gibt drei Arten von Smart Pointer. In diesem Beispiel wird der gemeinsame Zeiger (Shared Pointer) vorgestellt.

#include <iostream>

// necessary to use smartpointers //
#include <memory>

std::shared_ptr<int> sharedPointerDemo(){
    // create a shared pointer (one type of smart pointers) for the datatype int
    auto pointer = std::make_shared<int>(5);

    // create another two shared pointers inside this function and let it point to the
    // created pointer from above
    auto otherPointer = pointer;
    auto lastPointer = otherPointer;

    // A shared pointer 'knows' when it can be deleted or set to nullptr, because it stores a counter,
    // how often a referrence points to a specific address.
    std::cout << pointer.use_count() << "\n";

    // The benefit of shared pointer is, you don't need to free memory manual with 'delete'.
    // return one of the pointers
    return lastPointer;
}

int main() {
    auto pointerFromFunction = sharedPointerDemo();

    // The counter is 1, because the other two pointers from the function above were deleted automatically
    std::cout << pointerFromFunction.use_count() << "\n";
    std::cout << "Value:" << *pointerFromFunction.get() << "\n";

    return 0;
}



0
0
0.000
1 comments
avatar

Du hast ein Upvote von mir bekommen, diese soll die Deutsche Community unterstützen. Wenn du mich unterstützten möchtest, dann sende mir eine Delegation. Egal wie klein die Unterstützung ist, Du hilfst damit der Community. DANKE!

0
0
0.000