C++11智能指针
C++11智能指针 为什么要使用智能指针: 智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时忘记释放,造成内存泄漏。使用智能指针可以很大程度上的避免这个问题,因为智能指针就是一个类,当超出了类的作用域是,类会自动调用析构函数,析构函数会自动释放资源。所以智能指针的作用原理就是在函数结束时自动释放内存空间,不需要手动释放内存空间。 1.auto_ptr (c++98的方案,cpp11已经抛弃) 采用所有权模式 auto_ptr< string> p1 (new string ("I reigned lonely as a cloud.”)); auto_ptr<string> p2; p2 = p1; //auto_ptr不会报错. 此时不会报错,p2剥夺了p1的所有权,但是当程序运行时访问p1将会报错。所以auto_ptr的缺点是:存在潜在的内存崩溃问题! 2.unique_ptr(替换auto_ptr) unique_ptr实现独占式拥有或严格拥有概念, 保证同一时间内只有一个智能指针可以指向该对象 。它对于避免资源泄露(例如“以new创建对象后因为发生异常而忘记调用delete”)特别有用 采用所有权模式,还是上面那个例子 unique_ptr<string> p3 (new string ("auto")); //#4 unique_ptr