C++学习笔记之 String

1、C++的c_str()方法返回一个指向C风格的字符串指针,如下:open()方法要求使用一个C风格的字符串作为参数,可以用string对象调用c_str()方法当做参数

string filemane;
cout<<"Enter file name: ";
cin>>filename;
ofstream fout;
fout.open(filename.c_str());

2、智能指针
auto_ptr,unique_ptr和shared_ptr都定义了类似指针的对象,可以将new获得的地址复制给这种对象,当智能指针过期时,其析构函数将使用delete来释放内存,因此,如果将new返回的地址赋给这些对象,将无需记住稍后释放这些内存:在智能指针过期时,这些内存将自动被释放,详细图解见C++ Prime Plus P668
要创建智能指针,必须包含头文件memory,该文件模板定义,然后使用常用的模板语法来实例化所需类型的指针,如模板auto_ptr包含如下构造函数

template<class X> class auto_ptr{
public:
	explicit auto_ptr(X* p=0)throw;
	...
};

请求X类型的auto_ptr将获得一个指向X类型的auto_ptr:

auto_ptr<double> pd(new double);
autp_ptr<string> ps(new string);

new double是new返回的指针,指向新分配的内存块,它是构造函数auto_ptr<>的参数,即对应于原型中形参p的实参

有关智能指针的注意事项
先来看如下赋值语句

auto_ptr<string> ps (new string("I reigned lonely as a cloud."));
auto_ptr<string> vocation;
vocation = ps;

上述赋值语句将完成什么工作呢,如果ps和vocation是常规指针,则两个指针将指向同一个string对象,这是不可接受的,因为程序将试图删除同一个对象两次:一次是ps过期时,另一次是vocation过期时,要避免这种问题,方法有多种

  • 定义赋值运算符,使之执行深复制,这样两个指针将指向不同的对象,其中一个对象是另一个对象的副本
  • 建立所有权概念,对于特定的对象,只能有一个智能指针可拥有它,这样只有拥有对象的智能指针的构造函数会删除该对象,然后让赋值操作转让所有权,这就是用于auto_ptr和unique_ptr的策略,单unique_ptr的策略更严格
  • 创建智能更高的指针,跟踪引用特定对象的智能指针数,这成为引用计数,例如,赋值时,计数加1,而指针过期时,计数将减1,仅当最后一个指针过期时,才调用delete,这是shared_ptr采用的策略
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值