【1】C++11智能指针
应用示例如下:
1 #include <iostream> 2 #include <memory> 3 using namespace std; 4 5 void test_unique_ptr() 6 { 7 unique_ptr<int> up1(new int(2020)); // 无法复制的unique_ptr 8 // unique_ptr<int> up2 = up1; // 不能通过编译 9 cout << (*up1) << endl; // 2020 10 unique_ptr<int> up3 = move(up1); // 现在up3是数据唯一的unique_ptr智能指针 11 cout << (*up3) << endl; // 2020 12 // cout << (*up1) << endl; // 运行时错误 13 up3.reset(); // 显式释放内存 14 up1.reset(); // 不会导致运行时错误 15 // cout << (*up3) << endl; // 运行时错误 16 } 17 18 void test_shared_ptr() 19 { 20 shared_ptr<int> sp1(new int(131)); 21 shared_ptr<int> sp2 = sp1; 22 cout << (*sp1) << endl; // 131 23 cout << (*sp2) << endl; // 131 24 sp1.reset(); 25 // cout << (*sp1) << endl; 26 cout << (*sp2) << endl; // 131 27 } 28 29 void check(weak_ptr<int> & wp) 30 { 31 shared_ptr<int> sp = wp.lock(); // 转换为shared_ptr 32 if (sp != nullptr) 33 { 34 cout << "still " << (*sp) << endl; 35 } 36 else 37 { 38 cout << "pointer is invalid." << endl; 39 } 40 41 } 42 void test_weak_ptr() 43 { 44 shared_ptr<int> sp1(new int(2020)); 45 shared_ptr<int> sp2 = sp1; 46 weak_ptr<int> wp = sp1; // 指向shared_ptr<int>所指对象 47 cout << (*sp1) << endl; // 2020 48 cout << (*sp2) << endl; // 2020 49 50 check(wp); // still 2020 51 sp1.reset(); 52 cout << (*sp2) << endl; // 2020 53 check(wp); // still 2020 54 sp2.reset(); 55 check(wp); // pointer is invalid 56 } 57 58 int main() 59 { 60 test_unique_ptr(); 61 test_shared_ptr(); 62 test_weak_ptr(); 63 }
good good study, day day up.
顺序 选择 循环 总结
来源:https://www.cnblogs.com/Braveliu/p/12247042.html