龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

对auto_ptr的学习

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
auto_ptr是C++标准库提供的类模板,它可以帮助程序员自动管理用new表达式动态分配的单个对象,不过对用new表达式分配的数组管理没有类似的支持,不能用auto_ptr存储数组,如果这样做了,结果

  auto_ptr是C++标准库提供的类模板,它可以帮助程序员自动管理用new表达式动态分配的单个对象,不过对用new表达式分配的数组管理没有类似的支持,不能用auto_ptr存储数组,如果这样做了,结果将是未定义的.

  auto_ptr对象被初始化为指向由new表达式创建的动态分配对象.当auto_ptr对象的生命期结束时,动态分配的对象被自动释放.

  在使用auto_ptr类模板之前,必须包含下面的头文件:

  #include

  auto_ptr对象的定义有下面三种形式:

  auto_ptr identifier(ptr_allocated_by_new);

  auto_ptr identifier(auto_ptr_of_same_type);

  auto_ptr identifier;

  type_pointed_to代表由new表达式创建的对象的类型.在最常见的情况下,我们希望把auto_ptr直接初始化为new表达式返回的对象地址.可以这样来做:

  auto_ptr pi(new int(1024);

  pi被初始化为由new表达式创建的对象的地址,且该对象的初始化值为1024.可以检查auto_ptr所指的对象的值,方式与普通指针相同:

  if (*pi != 1024);

  new表达式创建的对象由pi指向,当pi的生命期结束时,它将被自动释放.如果pi是全局对象,则pi所指向的对象在程序结束时释放.

  如果我们用一个class类型的对象初始化auto_ptr对象,比如标准的string类型,则:

  auto_ptr pstr_auto(new string("Hello world"));

  假设现在希望访问一个字符串操作,对于普通的string指针,会按照下面这样来做:

  string* pstr_type = new string("Hello World");

  pstr_type->size();

精彩图集

赞助商链接