add example for "default constructor, copy constructor, destructor, if you need one you'll need all"
add smart pointer add pointer pointer
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
#include <iostream>
|
||||
#include <memory> // smart pointer header
|
||||
|
||||
using namespace std;
|
||||
|
||||
@@ -7,6 +8,9 @@ void changeIntegerPerPointer(int* pN);
|
||||
int changeIntegerPerReturn(int n);
|
||||
void changeIntegerPerReference(int& n);
|
||||
|
||||
bool createInteger(int* pN);
|
||||
bool createIntegerWithPointerPointer(int** ppN);
|
||||
|
||||
int main()
|
||||
{
|
||||
// general
|
||||
@@ -18,7 +22,7 @@ int main()
|
||||
|
||||
*pNumber = 567;
|
||||
|
||||
//pNumber = new int(0); // BAD BAD - Memory Leak, because we override an existing pointer address with a new one without saving the old one
|
||||
// pNumber = new int(0); // BAD BAD - Memory Leak, because we override an existing pointer address with a new one without saving the old one
|
||||
|
||||
// here are 100s of lines of code
|
||||
|
||||
@@ -29,11 +33,57 @@ int main()
|
||||
}
|
||||
|
||||
// pointer as references
|
||||
int number = 0;
|
||||
changeInteger(number);
|
||||
changeIntegerPerPointer(&number);
|
||||
changeIntegerPerPointer(pNumber);
|
||||
changeIntegerPerReference(number);
|
||||
//int number = 0;
|
||||
//changeInteger(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 loose connection to a shared_ptr
|
||||
|
||||
unique_ptr<int> number = make_unique<int>(10);
|
||||
*number = 100;
|
||||
//unique_ptr<int> number2 = number; // compiler error - you can create a copy of an unique pointer
|
||||
unique_ptr<int> number2 = make_unique<int>(*number);
|
||||
|
||||
shared_ptr<int> number3 = make_shared<int>(20);
|
||||
shared_ptr<int> number4 = number3;
|
||||
*number3 = 200;
|
||||
*number4 = 2000;
|
||||
|
||||
number3.reset();
|
||||
|
||||
weak_ptr<int> weakNumber = number4;
|
||||
//*weakNumber = 20000; // compiler error, weak pointer have no direct access to a shared pointer, you have to create one
|
||||
|
||||
if (!weakNumber.expired())
|
||||
{
|
||||
shared_ptr<int> tmpSharedNumber = weakNumber.lock();
|
||||
*tmpSharedNumber = 20000;
|
||||
}
|
||||
|
||||
number4.reset();
|
||||
shared_ptr<int> tmpSharedNumber = weakNumber.lock();
|
||||
|
||||
// pointer-pointer
|
||||
if (createInteger(pNumber))
|
||||
{
|
||||
cout << "Create integer was succesful" << endl;
|
||||
}
|
||||
|
||||
if (createIntegerWithPointerPointer(&pNumber))
|
||||
{
|
||||
cout << "Create integer was succesful" << endl;
|
||||
}
|
||||
|
||||
if (pNumber != nullptr)
|
||||
{
|
||||
delete pNumber;
|
||||
pNumber = nullptr;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -56,3 +106,17 @@ void changeIntegerPerReference(int& n)
|
||||
{
|
||||
n = 300;
|
||||
}
|
||||
|
||||
bool createInteger(int* pN)
|
||||
{
|
||||
pN = new int(0); // CAUTION - creates a MEMORY LEAK
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool createIntegerWithPointerPointer(int** ppN)
|
||||
{
|
||||
*ppN = new int(0);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user