add smart pointers

add polymorphism
add destructor & copy constructor
add pointer-pointer
This commit is contained in:
2025-09-22 18:22:03 +02:00
parent d8f6014fab
commit 3b35b973c9
13 changed files with 208 additions and 7 deletions
+41
View File
@@ -1,4 +1,5 @@
#include <iostream>
#include <memory>
#include "functions.h"
@@ -33,5 +34,45 @@ int main()
changeIntegerPerPointer(pNumber);
changeIntegerPerReference(number);
// smart pointer
// unique_ptr - only one owner exist for the object
// shared_ptr - can have multiple owners
// weak_ptr - is a loose connection to a shared pointer
unique_ptr<int> pNumber2 = make_unique<int>(10);
*pNumber2 = 100;
//unique_ptr<int> pNumber3 = pNumber2; // compiler error- you can't create a copy of an unique pointer
unique_ptr<int> pNumber4 = make_unique<int>(*pNumber2);
shared_ptr<int> pNumber5 = make_shared<int>(10);
shared_ptr<int> pNumber6 = pNumber5;
*pNumber6 = 100;
pNumber5.reset();
weak_ptr<int> pNumber7 = pNumber6;
//*pNumber7 = 1000; // compiler error, weak pointer has no direct access to a shared pointer, you have to create a new shared pointer
if (!pNumber7.expired())
{
shared_ptr<int> tmpSharedNumber = pNumber7.lock();
*tmpSharedNumber = 10000;
}
pNumber6.reset();
shared_ptr<int> tmpSharedNumber2 = pNumber7.lock();
if (tmpSharedNumber2 != nullptr) *tmpSharedNumber2 = 100000;
// pointer-pointer
createInteger(pNumber);
createIntegerWithPointerPointer(&pNumber);
if (pNumber != nullptr)
{
delete pNumber;
pNumber = nullptr;
}
return 0;
}