#include #include #include #include #include using namespace std; class SomeClass { int data_; public: SomeClass(int arg = 0) : data_(arg) { cout << "SomeClass ctor called: address=" << this << endl; } ~SomeClass() { cout << "SomeClass dtor called address=" << this << endl; } int data() const { return data_; } int& data() { return data_; } }; int main () { unique_ptr up1(new int(6)); cout << "*up1=" << *up1 << endl << endl; // unique_ptr up2 = new int(7); // Error unique_ptr up2; // up2 = new int; // Error assignment operator does not take pointer argument, except .. up2 = nullptr; up2 = make_unique(5); // requires C++14 cout << "*up2=" << *up2 << endl; cout << "up2.get()=" << up2.get() << endl; cout << "*up2.get()=" << *up2.get() << endl << endl; // If you don't have C++14 unique_ptr up3 = unique_ptr(new int(4)); cout << "*up3=" << *up3 << endl << endl; // unique_ptrs with class auto upS1 = make_unique(7); cout << "upS1->data()=" << upS1->data() << endl; upS1->data() *= 3; cout << "upS1->data()=" << upS1->data() << endl << endl; // unique_ptr with STL container auto upV = make_unique>(); // Note: parentheses required upV -> push_back(1); upV -> push_back(2); upV -> push_back(3); copy(upV->begin(), upV->end(),ostream_iterator(cout," ")); cout << endl << endl; deque di={3,4,5,6,7}; auto upDi = make_unique>(di); (*upDi)[2] = 77; for (auto value : *upDi) cout << value << ' '; cout << endl << endl; // release cout << "up1.get()=" << up1.get() << endl; auto ptr4up1 = up1.get(); cout << "ptr4up1=" << ptr4up1 << endl; up1.release(); // Watch out for the leak! cout << "up1.get()=" << up1.get() << endl; cout << "*ptr4up1=" << *ptr4up1 << endl; delete ptr4up1; ptr4up1 = nullptr; cout << endl; // reset unique_ptr up4(new int(4)); cout << "up4.get()=" << up4.get() << endl; up4.reset(); cout << "up4.get()=" << up4.get() << endl; up4 = make_unique(44); cout << "up4.get()=" << up4.get() << endl; cout << "*up4=" << *up4 << endl; up4.reset(new int(444)); cout << "up4.get()=" << up4.get() << endl; cout << "*up4=" << *up4 << endl << endl; auto upS2 = make_unique(77); cout << "upS2->data()=" << upS2->data() << endl; upS2.reset(); cout << endl; cout << "That's all folks!!!" << endl; }