本节主要介绍字符串类和智能指针auto_ptr。字符串的表现形式多种多样,如TCHAR,std::string、BSTR,等。字符串类均起源于C语言的字符串,而最初C语言的字符串是字符的数组。单字节字符串顺序存放各个字符串,并用‘\0’表示字符串的结束。在C语言中,已存在部分字符串处理函数,例如strcpy(),sprintf(),stoi()等,只能用于单字节字符串。在标准库中,还有仅用于Unicode字符串的函数,如:wcscpy(),swprintf(),_wtol()等。
多数人都惯于使用指针++和--操作符来遍历字符串。使用数组处理字符串中的字符也非常方便。无论ASCII码字符串还是unicode字符串,使用指针均能够正确无误地返回要寻求的字符位置。
STL中只有一个字符串类,即basic_string。类basic_string实现管理以‘\0’结尾的字符数组。字符类型由模板参数决定。通常,basic_string被处理为不透明的对象,靠获得只读指针来访问缓冲区,写操作是由basic_string的成员函数实现的。STL的C++标准程序库中的string类,使用时不必担心内存是否充足、字符串长度等问题。string作为类出现,其集成的操作函数足以完成多数情况下的需要。可以使用“=”进行赋值,使用“==”进行等值比较,使用“+”做串联。
要使用string类,必须包含头文件<string>。在STL库中,basic_string有两个预定义类型:包含char的string类型和包含wchar的wstring类型。
string类的string::npos可同时定义字符串的最大长度,通常设置为无符号int的最大值。String类包含了6个构造函数。string类支持cin方式和getline()方式两种输入方式。简单示例如下:
上述三行代码,第一行是声明string类的对象stuff,第二行是从屏幕读入输入的字符串;第三行同样实现第二行代码的功能。
string库提供了许多其他功能,如删除字符串的部分或全部;用一个字符的部分或全部替换另一个字符串的部分或全部;插入、删除字符串中数据;比较、提取、复制、交换等。(www.xing528.com)
STL还提供了另一个模板类:auto_ptr类。该类主要用于管理动态内存分配。如果使用new()函数分配堆中的内存,而又不记得回收这部分内存,会导致内存泄漏。因此必须使用delete语句释放该内存块。即使在函数末端添加了delete语句释放内存,还需要在任何跳出该函数的语句(如抛出异常)之前添加释放内存的处理,例如goto语句和throw语句。auto_ptr模板定义了类似指针的对象,将new获得的地址赋给该对象。当auto_ptr对象过期时,析构函数将使用delete来释放内存。如果将new返回的地址赋值给quto_ptr对象,无须记住还需要释放这些内存。在auto_ptr对象过期时,内存将自动被释放。在C++语言中,要使用STL中的auto_ptr对象,必须包含头文件<memory>。该文件包括auto_ptr模板。使用通常的模板句法来实例化所需类型的指针。auto_ptr构造函数是显式的,不存在从指针到auto_ptr对象的隐式类型转换。
模板可以通过构造函数将auto_ptr对象初始化为一个常规指针。auto_ptr是一个智能指针,但其特性远比指针要多。值得注意的是,在使用auto_ptr时,只能配对使用new和de-lete。
提示
只能对new分配的内存使用auto_ptr对象,不要对由new()分配的或通过声明变量分配的内存使用它。
总结
总结:C++库中的auto_ptr对象是一种智能指针。智能指针是一种类,即其对象的特征类似于指针。智能指针存储new分配的内存地址,也可以被解除引用。智能指针是一个类对象,可以修改和扩充简单指针的行为。智能指针可以建立引用计数,这使得多个对象可共享由智能指针跟踪的同一个值。当使用该值的对象数为0时,智能指针将删除该值。智能指针可以提高内存的使用效率,帮助防止内存泄露。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。