C++智能指针的几种用法

 auto在c++11中已经弃用。html

1、auto_ptr模板c++

  auto_ptr与shared_ptr、unique_ptr都定义了相似指针的对象,能够将new到的地址赋给这一对象,当智能指针过时时,析构函数会调用delete函数,对象将被销毁,由此内存能够自动被释放。数组

2、shared_ptr模板安全

  先看代码:函数

auto_ptr p1 (new string("hello world!");
auto_ptr p2;
p2 = p1;

 

  在以上代码中,p1与p2指向同一对象,常规指针在释放内存时,系统会尝试删除同一对象两次。在auto_ptr中,对象的全部权会归于p2,p1将会变为野指针。shared_ptr则容许多个指针指向同一个对象,每多一个指针指向,计数器就会+1,一样在释放的时候,当数值减为0的时候即最后一个指针过时的时候才会调用delete函数。url

3、unique_ptr模板.net

  一样为了不多个指针指向,unique_ptr严格了全部权的概念,即个人就个人,不容许他人指向(如代码段二中,采用unique_ptr编辑将会报错,而原代码会编译经过但可能形成崩溃)。指针

4、总结c++11

  须要多个指针指向一个对象时可以使用shared_ptr,如指针数组。不须要多个指针指向一个对象可以使用uniq_ptr,uniqu_ptr比auto_ptr更加安全(编译报错远比程序崩溃好得多)。这里作了一个表格总结。code

                      

 

 

参考连接:

智能指针用法详解

三种智能指针使用与区别

四种智能指针的用法和原理

C++智能指针及其简单实现

相关文章
相关标签/搜索