#include #include void changeInt(int n); void changeIntPointer(int* pN); void changeIntReference(int& n); void createInt(int* pI); void createInt(int** ppI); int main() { int i = 1; int* pI = nullptr; pI = &i; *pI = 10; std::cout << "i = " << i << std::endl; pI = new int; pI = new int(); // CAUTION - created a memory leak pI = new int(10); // CAUTION - created a memory leak delete pI; pI = nullptr; changeInt(i); changeIntPointer(&i); changeIntReference(i); // const // const int ci = 10; // integer is constant // const int* pCi = new int(0); // pointer to a constant integer // pCi = new int(0); // *pCi = 0; // int const * pic = new int(0); // pointer to a constant integer // pic = new int(0); // *pic = 0; // const int const * pcic = new int(0); // pointer to a constant integer // pcic = new int(0); // *pcic = 0; // int * const cpi = new int(0); // constant pointer to an integer // cpi = new int(0); // *cpi = 0; // int const * const cpic = new int(0); // constant pointer to a constant integer // cpic = new int(0); // *cpic = 0; // const int * const cpci = new int(0); // constant pointer to a constant integer // cpci = new int(0); // *cpci = 0; // const int const * const cpcic = new int(0); // constant pointer to a constant integer // cpcic = new int(0); // *cpcic = 0; createInt(pI); createInt(&pI); if (pI != nullptr) { delete pI; pI = nullptr; } std::unique_ptr upI = std::make_unique(0); // std::unique_ptr upI2 = upI; // don't work std::unique_ptr upI2 = std::make_unique(*upI); std::shared_ptr spI = std::make_shared(0); std::shared_ptr spI2 = spI; spI.reset(); std::weak_ptr wpI = spI2; if (wpI.expired()) { std::cout << "wpI is expired" << std::endl; } else { std::cout << "wpI is not expired" << std::endl; std::shared_ptr spI3 = wpI.lock(); } spI2.reset(); if (wpI.expired()) { std::cout << "wpI is expired" << std::endl; } else { std::cout << "wpI is 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* pI) { pI = new int(0); } void createInt(int** ppI) { if (ppI == nullptr) return; *ppI = new int(0); }