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
+14
View File
@@ -24,3 +24,17 @@ bool changeIntegerPerReference(int& n)
n *= 2;
return true;
}
bool createInteger(int* pN)
{
pN = new int(0); // BAD BAD - creates a memory leak
return false;
}
bool createIntegerWithPointerPointer(int** ppN)
{
*ppN = new int(0);
return true;
}
+4 -1
View File
@@ -3,4 +3,7 @@
void changeInteger(int n);
int changeIntegerPerReturn(int n);
bool changeIntegerPerPointer(int* pN);
bool changeIntegerPerReference(int& n);
bool changeIntegerPerReference(int& n);
bool createInteger(int* pN);
bool createIntegerWithPointerPointer(int** ppN);
+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;
}