c++11标准模板库(STL) - 智能指针

如果对象实在栈上动态内存创建的,那么一旦离开作用域,对象会销毁资源也同时会释放。但是如果是使用 new 创建的,则必须显式调用 delete 来释放。

C++引入异常机制后,如果没有智能指针,程序员必须保证new对象能在正确的时机delete,必须到处编写异常捕获代码以释放资源,而智能指针则可以在退出作用域时 - 不管是正常流程离开或是因异常离开 - 总调用delete来析构在堆上动态分配的对象。

auto_ptr 是 c++98 标准的智能指针,在 c++11已废弃。

unique_ptr 是目前推荐使用的智能指针,内部不能拷贝。

//c++11编译报错,只允许一个指向
std::unique_ptr<Report> ps (new string("using auto_ptr"));
std::unique_ptr<Report> ps1 = ps

shared_ptr 可以自由的拷贝,拷贝一次引用计数 +1 。销毁一次引用计数 -1 。当引用计数为0时才会释放内存。

std::shared_ptr<Report> ps (new string("hello freecls"));
std::shared_ptr<Report> ps1 = ps

此时只有当 ps和ps1同时销毁时才会释放内存。


上一篇: c++11标准模板库(STL) - 输入输出
下一篇: 无
作者邮箱: 203328517@qq.com