string深刻认识
来源:互联网 发布:oracle导出数据库脚本 编辑:程序博客网 时间:2024/05/29 14:43
string的本质其实是个类,而char十个内建类型 不属于类。其次在初始化的时候,一点要注意string不可以设置为null,(如果你以前习惯 char * str = null),这是因为string的赋值函数的实现会直接传入进入 调用这个null的内部变量出错。大家可以看如下代码
- String & String::operate =(const String &other)
- {
- // (1) 检查自赋值
- if(this == &other)
- return *this;
- // (2) 释放原有的内存资源
- delete [] m_data;
- // (3)分配新的内存资源,并复制内容
- <span style="white-space:pre"> </span>int length = strlen(other.m_data);
- <span style="white-space:pre"> </span>m_data = new char[length+1];
- strcpy(m_data, other.m_data);
- // (4)返回本对象的引用
- return *this;
- }
- String::String(const char *str)
- {
- if(str==NULL)
- {
- <span style="white-space:pre"> </span>m_data = new char[1]; // 得分点:对空字符串自动申请存放结束标志'\0'的空
- //加分点:对m_data加NULL 判断
- <span style="white-space:pre"> </span>*m_data = '\0';
- }
- else
- {
- <span style="white-space:pre"> </span>int length = strlen(str);
- <span style="white-space:pre"> </span>m_data = new char[length+1]; // 若能加 NULL 判断则更好
- <span style="white-space:pre"> </span>strcpy(m_data, str);
- }
- }
默认的情况下string定义const char * str = NULL
所以会执行if, 这里面会涉及内存开辟已经完成,没有内存可以分配情况
- {
- <span style="white-space:pre"> </span>m_data = new char[1]; // 得分点:对空字符串自动申请存放结束标志'\0'的空
- //加分点:对m_data加NULL 判断
- <span style="white-space:pre"> </span>*m_data = '\0';
- }
这里面可以写成
- {
- <span style="white-space:pre"> </span>m_data = new char[1]; // 得分点:对空字符串自动申请存放结束标志'\0'的空
- //加分点:对m_data加NULL 判断
- if(m_data != NULL)
- {
- <span style="white-space:pre"> </span>*m_data = '\0';
- }
- }
0 0
- string深刻认识
- Java常考面试题7 深刻认识String、StringBuilder、StringBuffer
- 深刻认识木马
- 深刻认识OpenStack
- synchronized的深刻认识
- synchronized的深刻认识
- synchronized的深刻认识
- synchronized的深刻认识
- synchronized的深刻认识
- 深刻认识CGI
- 深刻认识clientX,offsetX,screenX
- 深刻认识clientX,offsetX,screenX
- 深刻认识clientX,offsetX,screenX
- java synchronized的深刻认识
- android services生命周期深刻认识
- new关键的深刻认识
- 让我有深刻认识的笑话,思考深刻啊
- 对String的深刻理解
- NSString 常用用法
- 绑定变量窥探和直方图
- 淘宝2012笔试
- C# 的Brush 及相关颜色的操作
- 黑马程序员:面向对象设计练习
- string深刻认识
- linux shell编程指南第二十一章------创建屏幕输出
- 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
- 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义
- FreeMarker教程
- qtp 设置等待时间
- oracle rac管理基本命令
- Unity3d ios/android 截屏到默认目录
- Mac Jython 安装