diff --git a/CPlusPlus/CPlusPlus.sln b/CPlusPlus/CPlusPlus.sln
index 979c04a..5c310a0 100644
--- a/CPlusPlus/CPlusPlus.sln
+++ b/CPlusPlus/CPlusPlus.sln
@@ -11,6 +11,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Classes", "Classes\Classes.
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Collections", "Collections\Collections.vcxproj", "{34173AE8-DCD5-46FE-AF4D-85FB110721BA}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Pointer", "Pointer\Pointer.vcxproj", "{2A8A01E9-D0E6-4D69-83EE-D05C81829EDB}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|ARM64 = Debug|ARM64
@@ -69,6 +71,18 @@ Global
{34173AE8-DCD5-46FE-AF4D-85FB110721BA}.Release|x64.Build.0 = Release|x64
{34173AE8-DCD5-46FE-AF4D-85FB110721BA}.Release|x86.ActiveCfg = Release|Win32
{34173AE8-DCD5-46FE-AF4D-85FB110721BA}.Release|x86.Build.0 = Release|Win32
+ {2A8A01E9-D0E6-4D69-83EE-D05C81829EDB}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {2A8A01E9-D0E6-4D69-83EE-D05C81829EDB}.Debug|ARM64.Build.0 = Debug|ARM64
+ {2A8A01E9-D0E6-4D69-83EE-D05C81829EDB}.Debug|x64.ActiveCfg = Debug|x64
+ {2A8A01E9-D0E6-4D69-83EE-D05C81829EDB}.Debug|x64.Build.0 = Debug|x64
+ {2A8A01E9-D0E6-4D69-83EE-D05C81829EDB}.Debug|x86.ActiveCfg = Debug|Win32
+ {2A8A01E9-D0E6-4D69-83EE-D05C81829EDB}.Debug|x86.Build.0 = Debug|Win32
+ {2A8A01E9-D0E6-4D69-83EE-D05C81829EDB}.Release|ARM64.ActiveCfg = Release|ARM64
+ {2A8A01E9-D0E6-4D69-83EE-D05C81829EDB}.Release|ARM64.Build.0 = Release|ARM64
+ {2A8A01E9-D0E6-4D69-83EE-D05C81829EDB}.Release|x64.ActiveCfg = Release|x64
+ {2A8A01E9-D0E6-4D69-83EE-D05C81829EDB}.Release|x64.Build.0 = Release|x64
+ {2A8A01E9-D0E6-4D69-83EE-D05C81829EDB}.Release|x86.ActiveCfg = Release|Win32
+ {2A8A01E9-D0E6-4D69-83EE-D05C81829EDB}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/CPlusPlus/Pointer/Pointer.vcxproj b/CPlusPlus/Pointer/Pointer.vcxproj
new file mode 100644
index 0000000..dc9cb59
--- /dev/null
+++ b/CPlusPlus/Pointer/Pointer.vcxproj
@@ -0,0 +1,188 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+ Debug
+ ARM64
+
+
+ Release
+ ARM64
+
+
+
+ 17.0
+ Win32Proj
+ {2a8a01e9-d0e6-4d69-83ee-d05c81829edb}
+ Pointer
+ 10.0
+
+
+
+ Application
+ true
+ v143
+ Unicode
+
+
+ Application
+ false
+ v143
+ true
+ Unicode
+
+
+ Application
+ true
+ v143
+ Unicode
+
+
+ Application
+ false
+ v143
+ true
+ Unicode
+
+
+ Application
+ true
+ v143
+ Unicode
+
+
+ Application
+ false
+ v143
+ true
+ Unicode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Level3
+ true
+ WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+
+
+ Console
+ true
+
+
+
+
+ Level3
+ true
+ true
+ true
+ WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+
+
+ Console
+ true
+
+
+
+
+ Level3
+ true
+ _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+
+
+ Console
+ true
+
+
+
+
+ Level3
+ true
+ true
+ true
+ NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+
+
+ Console
+ true
+
+
+
+
+ Level3
+ true
+ _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+
+
+ Console
+ true
+
+
+
+
+ Level3
+ true
+ true
+ true
+ NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+
+
+ Console
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CPlusPlus/Pointer/Pointer.vcxproj.filters b/CPlusPlus/Pointer/Pointer.vcxproj.filters
new file mode 100644
index 0000000..54bcd79
--- /dev/null
+++ b/CPlusPlus/Pointer/Pointer.vcxproj.filters
@@ -0,0 +1,30 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+
+
+ Header Files
+
+
+
\ No newline at end of file
diff --git a/CPlusPlus/Pointer/functions.cpp b/CPlusPlus/Pointer/functions.cpp
new file mode 100644
index 0000000..99a39ed
--- /dev/null
+++ b/CPlusPlus/Pointer/functions.cpp
@@ -0,0 +1,18 @@
+#include "functions.h"
+
+void changeInteger(int n)
+{
+ n *= 2;
+}
+
+void changeIntegerPerPointer(int* pN)
+{
+ if (pN == nullptr) return; // BE CAREFUL - a pointer can always be nullptr
+
+ *pN *= 2;
+}
+
+void changeIntegerPerReference(int& n)
+{
+ n *= 2;
+}
\ No newline at end of file
diff --git a/CPlusPlus/Pointer/functions.h b/CPlusPlus/Pointer/functions.h
new file mode 100644
index 0000000..d509cd5
--- /dev/null
+++ b/CPlusPlus/Pointer/functions.h
@@ -0,0 +1,5 @@
+#pragma once
+
+void changeInteger(int n);
+void changeIntegerPerPointer(int* pN);
+void changeIntegerPerReference(int& n);
\ No newline at end of file
diff --git a/CPlusPlus/Pointer/main.cpp b/CPlusPlus/Pointer/main.cpp
new file mode 100644
index 0000000..dc3d6f7
--- /dev/null
+++ b/CPlusPlus/Pointer/main.cpp
@@ -0,0 +1,69 @@
+#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;
+}
\ No newline at end of file