#include #include #include void changeInt(int n); void changeIntPointer(int *pN); void changeIntReference(int &n); void createInt(int *pN); void createInt(int **ppN); int main() { int i = 5; int *pI = nullptr; pI = &i; *pI = 10; pI = new int; pI = new int(); // CAUTION - memory leak created pI = new int(10); // CAUTION - memory leak created delete pI; pI = nullptr; int &rI = i; // reference changeInt(i); changeIntPointer(&i); changeIntReference(i); createInt(pI); createInt(&pI); // const // const int ci = 5; // constant integer // const int* cpi = new int(0); // pointer to a constant integer // cpi = new int(10); // *cpi = 10; // int const * pci = new int(0); // pointer to a constant integer // pci = new int(10); // *pci = 10; // int * const pic = new int(0); // constant pointer to an integer // pic = new int(10); // *pic = 10; // const int * const cpic = new int(0); // constant pointer to a constant integer // cpic = new int(10); // *cpic = 10; // int const * const pcic = new int(0); // constant pointer to a constant integer // pcic = new int(10); // *pcic = 10; // const int const * cpci = new int(0); // const int const * const cpcic = new int(0); std::unique_ptr upi = std::make_unique(10); // std::unique_ptr upi2 = upi; // don't work std::unique_ptr upi3 = std::make_unique(*upi); std::shared_ptr spi = std::make_shared(10); std::shared_ptr spi2 = spi; spi.reset(); std::weak_ptr wpi = spi2; if (wpi.expired()) { std::cout << "expired" << std::endl; } else { std::cout << "not expired" << std::endl; std::shared_ptr spi3 = wpi.lock(); } spi2.reset(); if (wpi.expired()) { std::cout << "expired" << std::endl; } else { std::cout << "not expired" << std::endl; } return 0; } void changeInt(int n) { n *= 2; } void changeIntPointer(int *pN) { if (pN == nullptr) return; *pN *= 2; } void changeIntReference(int &n) { n *= 2; } void createInt(int *pN) { pN = new int(10); } void createInt(int **ppN) { if (ppN == nullptr) return; *ppN = new int(10); }