主页C++ Builder 资料C++ Builder 参考手册System 字符串WideString
C++ Builder 串口控件
C++ Builder 编程技巧
C++ Builder 操作指南
C++ Builder 参考手册
基础知识
cfloat 浮点数
cmath 数学函数
cstdlib 标准库函数
System 字符串
 • UnicodeString
 • UTF8String
 • TStringList
 • TStrings
 • String
 • AnsiString
 • AnsiStringBase
 • AnsiStringT
 • RawByteString
 • UCS4String
 • WideString
   · 方法
   · 类型
   · 数据
 • EnumToStr
 • FloatToStr
 • FloatToStrF
 • FormatFloat
 • IntToStr
 • UIntToStr
 • IntToHex
 • StrToEnum
 • StrToFloat
 • StrToFloatDef
 • StrToInt
 • StrToIntDef
 • StrToInt64
 • StrToInt64Def
 • StrToUInt64
 • StrToUInt64Def
 • TFloatFormat
 • GetUnicodeCategory
 • IMLangCodePages
 • StringReplace
System 日期和时间
System.Math.hpp 数学函数
其他数据类型
VCL 基础类
VCL 应用程序
Pictures 图片
Graphics 绘图
Additional 控件
System 控件
A ~ Z 字母顺序排列的目录
网友留言/技术支持
WideString - BSTR 类型的封装,不是标准 C/C++ 的字符串类型的封装

WideString - COM (component object model) 的 BSTR 类型的封装,而不是标准 C/C++ 的字符串类型的封装。

如果你正在用、打算用、或者曾经用过 6.0 或更早期的 C++ Builder 版本,一定要看【注:赋值操作符 operator = 的问题

成员:

属性方法事件类型数据

 

头文件:

#include <System.hpp>

 

命名空间:

System

继承关系:

 

注:赋值操作符 operator = 的问题

老版本的 C++ Builder,例如 C++ Builder 6.0 的赋值操作符,就相当于 Attach 方法,直接引用了 BSTR,这样会让把 wchar_t * 型的普通 C/C++ 字符串,或者字符串常数赋值给 WideString,按照 BSTR 类型进行引用,而引起内存管理错误,发送无法捕获的异常,甚至程序崩溃。
新版本的 C++ Builder,例如 C++ Builder 2007 之后的版本的赋值操作符,会把字符串复制到当前的数据里面,不会产生误操作错误,但是会产生和老版本程序的兼容性问题。老版本会接管 BSTR 的内存管理和销毁工作,而新版本只是把数据复制过来,并不接管 BSTR 的任何操作。

程序代码 C++ Builder 6.0 及更早期的版本 C++ Builder 2007 及更新的版本
WideString s;
s = L"你好"; // 使用赋值操作符
会出现无法捕获的异常,字符串被 Attach 接管而不是复制,
由于接管的不是 BSTR 类型,内存管理会出问题,程序崩溃
没有任何问题,
被复制到字符串内部管理的数据
◤上一页:UCS4String下一页:EnumToStr

C++ 爱好者 -- Victor Chen 的个人网站 www.cppfans.com 辽ICP备11016859号