#include #include // smart pointer header #include "functions.h" using namespace std; int main() { // general int* pNumber = nullptr; pNumber = new int(0); cout << "pNumber: " << pNumber << endl; cout << "*pNumber: " << *pNumber << endl; cout << "size of pointer: " << sizeof(pNumber) << endl; cout << "size of *pointer: " << sizeof(*pNumber) << endl; *pNumber = 567; //pNumber = new int(0); // BAD BAD - Memory Leak, because we overriding an existing pointer address with a new one // here are 100s line of code OR at different position if (pNumber != nullptr) { delete pNumber; pNumber = nullptr; } // pointer as references int number = 10; changeInteger(number); changeIntegerPerPointer(&number); changeIntegerPerPointer(pNumber); changeIntegerPerReference(number); //changeIntegerPerReference(10); // doesn't work, because you need an existing & initialized variable for a reference // 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_ptr unique_ptr pNumber2 = make_unique(10); *pNumber2 = 100; //unique_ptr pNumber3 = pNumber2; // compiler error - you can't create a copy of an unique pointer unique_ptr pNumber4 = make_unique(*pNumber2); shared_ptr pNumber5 = make_shared(10); shared_ptr pNumber6 = pNumber5; *pNumber6 = 100; pNumber5.reset(); weak_ptr pNumber7 = pNumber6; //*pNumber7 = 1000; // compiler error, because a weak pointer has no direct access to the shared pointer, you have to create a shared pointer object if (!pNumber7.expired()) { shared_ptr pTmpSharedPointer = pNumber7.lock(); *pTmpSharedPointer = 10000; } pNumber6.reset(); shared_ptr pTmpSharedPointer2 = pNumber7.lock(); if (pTmpSharedPointer2 != nullptr) *pTmpSharedPointer2 = 10; // smart pointer are no guarantee for a valid object behind the pointer return 0; }