78 lines
2.0 KiB
C++
78 lines
2.0 KiB
C++
#include <iostream>
|
|
#include <memory>
|
|
|
|
#include "functions.h"
|
|
|
|
using namespace std;
|
|
|
|
int main()
|
|
{
|
|
// general
|
|
int* pNumber = nullptr; // pointer definition, always initialize a pointer (at least with nullptr)
|
|
pNumber = new int(0); // creates a new integer value on the heap
|
|
|
|
cout << "size of pointer: " << sizeof(pNumber) << endl;
|
|
cout << "size of pointer data: " << sizeof(*pNumber) << endl;
|
|
|
|
*pNumber = 789;
|
|
|
|
//pNumber = new int(0); // BAD BAD - memory leak, because we override an existin g pointer address with a new one without saving or deleting the old one
|
|
|
|
// here are 100s lines of code
|
|
|
|
if (pNumber != nullptr)
|
|
{
|
|
delete pNumber;
|
|
pNumber = nullptr;
|
|
}
|
|
|
|
// pointer as references outside local scope
|
|
int number = 10;
|
|
changeInteger(number);
|
|
number = changeIntegerPerReturn(number);
|
|
changeIntegerPerPointer(&number);
|
|
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;
|
|
} |