auto_ptr
来源:互联网 发布:《算法统宗》的题目 编辑:程序博客网 时间:2024/06/08 13:27
auto_ptr是一种智能指针(smart pointer),用来自动分配对象并且当不再需要对象时进行自动销毁。
智能指针可以保证,无论在什么情况下,只要自己被摧毁,就一定连带释放其所指资源。并且由于智能指针本身就是区域变量,无论正常退出与否,只要函数结束,它一定就会被销毁。auto_ptr是这样一种指针,它是“它所指向的对象”的拥有者,所以auto_ptr被销毁时,该对象也遭到销毁。
#include <memory>//auto_ptr类模板#include <iostream>#include <time.h>using namespace std;int main(int argc, char const *argv[]){//pi 被初始化为由 new 表达式创建的对象的地址且该对象的初始化值为 1024auto_ptr< int > pi (new int( 1024 ));if ( *pi != 1024){/* code */cerr << "opps error" <<endl;} else *pi = 2; cout<<*pi<<endl; auto_ptr< string > pstr_auto( new string("hello auto_ptr")); if ( pstr_auto->empty()) { cerr << "opps error" <<endl; } cout<<*pstr_auto<<endl; /*auto_ptr类模板背后的主要动机是支持与普通指针类型相同的语法 但是为auto_ptr所指对象的释放提供了自动管理 当定义一个auto_ptr对象时,它知道自己对初始化拥有权并且有责任删除*/ auto_ptr< int > p1 ( new int( 1024 )); auto_ptr< int > p2 ( new int( 2048 )); cout<<"p1:"<<*p1<<" p2:"<<*p2<<endl; p1 = p2; // cout<<"p1:"<<*p1<<" p2:"<<*p2<<endl;//出错 /*在赋值之前由p1指向的对象被删除,赋值之后p1拥有int型对象的所有权,该对象值为2048,p2不再被用来指向该对象*/ //另一种定义形式创建了一个auto_ptr对象,但是没有使用指针将其初始化 auto_ptr< int > p_auto_int; //cout << *p_auto_int<<endl;//没有初始化内部指针被设置为0,出错还没有初始化 if ( p_auto_int.get() != 0 && *p_auto_int != 1024) { *p_auto_int = 1024; } else { p_auto_int.reset( new int( 1024 )); } cout << *p_auto_int<<endl; //我们不能在auto_ptr对象被定义之后再用new 表达式创建对象的地址直接像其赋值,因此我们不能这样写 //auto_ptr<int> p3; //p3 = new int(4); //reset函数 const time_t rtb = time(NULL); auto_ptr< string > ps1 (new string("qweiroeriklkjsdald,mcxddsd")); ps1.reset( new string("djksldfsddddk")); const time_t rte = time(NULL); cout<<rte-rtb<<endl; //如果auto_ptr当前指向一个对象并且该auto_ptr对象拥有该对象的所有权 //则该对象在底层指针被重置之前首先被删除 //assign()函数对原有的字符串对象重新赋值,比删除原有的字符并重新分配更有效率 auto_ptr< string > ps2 (new string("qweiroeriklkjsdald,mcxddsd")); ps2->assign( "djksldfsddddk"); system("pause");return 0;}
0 0
- auto_ptr:
- Auto_ptr
- auto_ptr
- auto_ptr
- auto_ptr
- auto_ptr
- auto_ptr
- auto_ptr
- auto_ptr
- auto_ptr
- auto_ptr
- Auto_Ptr
- auto_ptr
- auto_ptr
- auto_ptr
- auto_ptr
- auto_ptr
- auto_ptr
- SAP ABAP alv中设置回车事件
- ubuntu中opensips安装与配置
- Attribute在.net编程中的应用
- $.ajax
- 【快速参考】SQL
- auto_ptr
- 在服务器端判断request来自Ajax请求(异步)还是传统请求(同步)
- VC6.0中clw、ncb、aps文件的作用
- effective C++ 阅读笔记 1
- C内存对齐
- Asp.net MVC area文件夹下设置默认显示页面
- NYOJ 525 一道水题
- 自定义“打开/另存为”对话框左侧快捷方式列表
- XP远程桌面mstsc和带参数的mstsc /console