Files
gpd-924/CPlusPlus/Pointer/main.cpp
T
2025-09-23 12:42:50 +02:00

83 lines
2.2 KiB
C++

#include <iostream>
#include <memory> // 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<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, 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<int> pTmpSharedPointer = pNumber7.lock();
*pTmpSharedPointer = 10000;
}
pNumber6.reset();
shared_ptr<int> pTmpSharedPointer2 = pNumber7.lock();
if (pTmpSharedPointer2 != nullptr) *pTmpSharedPointer2 = 10; // smart pointer are no guarantee for a valid object behind the pointer
// const exercise
// int *
// const int *
// int const *
// int * const
// const int * const
// int const * const
// const int const * const
// const int const const * const
// const int* pNumber = new int(0);
// *pNumber = 10; // is this working
// pNumber = new int(0); // is this working
return 0;
}