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
参考连接: