Irrlicht 源码学习笔记 【irrstring.h】
来源:互联网 发布:部落冲突猪升级数据 编辑:程序博客网 时间:2024/05/29 07:00
Irrlicht 中自己实现了一个字符串类
实现了一个字符串的模板,使用这个模板可以很容易定义出 ascii 字符串和 unicode 字符串
该类的实现相对简单,没有用到类似于 stl 中 string 的 copy-on-write 这些东西
字符串中私有成员变量有三个,分别是:
记录内存空间的指针 - array
申请的内存空间可以存储元素的个数 - allocated
空间中已经存储的元素个数 - used
(因为是模板,所以每一个 T 的空间是一个元素)
【关于赋值运算】
这里有一点需要注意的地方就是关于赋值运算符
假如当前要把字符串 B 赋给字符串 A,记得要考虑字符串 B 是字符串 A 的一部分时的情况
如果上来就直接把 A 的空间 delete 了的话就出问题了
所以 Irrlicht 中的做法是先保留 A 的空间,申请新的空间来赋值,赋值完毕再删除原来 A 的空间
这个也是博主之前会犯的错误。。。
//! Assignment operator for strings, ascii and unicode (给ascii编码和unicode编码的赋值语句)// 注 : 如果c是null, 会将0号元素设置为0, 但是没有对used进行设置template <class B>string<T>& operator=(const B* c) {if (!c){array[0] = 0x0;return *this;}if ((void*)c == (void*)array)return *this;s32 len = 0;const B* p = c;while(*p){++len;++p;}// 原始的字符串会先保留一段时间// 因为传入的字符串可能是原始字符串的一部分 ( 不得不佩服Irrlicht程序员考虑问题的周到! )T* oldArray = array; allocated = used = len+1;array = new T[used];for (s32 l = 0; l<len+1; ++l)array[l] = (T)c[l];delete [] oldArray;return *this;}
【_asm int 3】
在 Irrlicht 源码中多个地方使用到了内嵌的汇编语句 _asm int 3
而且都在前面加了 #ifdef _DEBUG 的预处理
意为:在 DEBUG 下满足某个条件时即触发断点, int 3 是汇编中的断点中断指令
//! Direct access operator (直接通过[]获取字符串中对应下标的字符)T& operator [](const s32 index) const{// _asm int 3 是使用汇编中的断点中断指令// 意为在DEBUG模式下, 如果下标越界则触发断点#ifdef _DEBUGif (index>=used)_asm int 3 // bad index#endifreturn array[index];}
【字符串结尾的 '\0'】
used 的空间是包括字符串末尾的 '\0'的,但是字符串的长度是不包括这个 '\0' 的
对于字符串的赋值拼接等等操作不要忘了这个尾巴的存在哦
古代的今天是乞巧节,现在的今天是虐狗节,唉。。。。
( 请注意一下右下角的博主 Ծ‸ Ծ )
阅读全文
0 0
- Irrlicht 源码学习笔记 【irrstring.h】
- Irrlicht 源码学习笔记 【IEventReceiver.h】
- Irrlicht 源码学习笔记 【line2d.h】
- Irrlicht 源码学习笔记 【Color.h】
- Irrlicht 源码学习笔记 【Irrlicht.h/cpp】 【irrTypes.h】 【KeyCodes.h】 【irrmath.h】
- Irrlicht 源码学习笔记 【position2d.h】 【vector2d.h】
- Irrlicht 源码学习笔记 【plane3d.h】【plane3dex.h】
- Irrlicht 源码学习笔记 【CFileList.h/cpp】【CReadFile.h/cpp】【CMemoryReadFile.h/cpp】
- Irrlicht 源码学习笔记 开篇
- Irrlicht 源码 学习笔记 【IUnknown】
- Irrlicht 源码学习笔记 【vector3d】
- Irrlicht学习笔记(1)--helloworld
- Irrlicht学习笔记(2)--quake3map
- Irrlicht学习笔记(3)--CustomSceneNode
- Irrlicht学习笔记(4)--Movement
- Irrlicht学习笔记(5)--UserInterface
- Irrlicht学习笔记(7.1)--Collision
- Irrlicht学习笔记(7.2)--Collision
- Generating Permutations UVA
- REM手机屏幕适配
- 论文阅读实践
- memcpy与memset
- Javaweb核心之session&cookie
- Irrlicht 源码学习笔记 【irrstring.h】
- vim的ex模式用法
- 《数学之美》—— 读后总结
- 一切从现在开始
- SVN更新后显示 A\R\U\C\G代表的含义
- Excel 3个简单技巧轻松避免格式不规范数据出错
- oozie 常用命令
- VTK学习(一)
- 登峰造极之树——Splay伸展树