string类

来源:互联网 发布:desmume关闭软件复位 编辑:程序博客网 时间:2024/06/03 17:49

String类
(1)string类的输入
c风格:

char info[100];cin>>info;cin.getline(info,100);  //read a line,discard '\n'cin.get(info,100);       //read a line, leave '\n' in queue

string对象:

string stuff;cin>>stuff;   //read a word which can be very longgetline(cin,stuff);   //read a line,discard '\n']

(2)智能指针
要创建智能指针对象,必须包含头文件memory
有auto_ptr(不好), unique_ptr, shared_ptr.
如:

#include<memory> auto_ptr<double> pd(new double);  //pd is an auto_ptr to double, used in place of double * pd

问题代码:

auto_ptr<string> ps(new string("I'm a good man"));auto_ptr<string> vp;vp=ps;   //vp接管string对象的所有权后,ps的所有权将被剥夺。但是如果后续程序要使用ps,程序会崩溃

如果ps和vp都是常规指针,则两个指针将指向同一个string对象,这是不对的,因为程序师徒删除同一个对象两次——一次是ps过期时,一次是vp过期时。
解决方法:
1、定义赋值运算符,使之执行深度复制。
2、简历所有权概念,对于特定对象,智能有一个智能指针指向它。unique_ptr的策略
3、创建智能更高的指针,跟踪引用特定对象的智能指针数。shared_ptr策略。

程序试图将unique_ptr赋给另一个时,如果源程序unique_ptr是个临时右值(如函数返回值),编译器允许这样做;如果unique_ptr将存在一段时间,编译器禁止这样做。

using namespace std;unique_ptr<string> p1(new string("Hello"));unique_ptr<string> p2;p2=p1;                                                           //not allowedp3=unique_ptr<string> (new string("Merry"));  //allowed

STL
面向对象编程关注的是编程的数据方面,而面向泛型编程关注的是算法。

0 0
原创粉丝点击