面试题1:赋值运算符函数
来源:互联网 发布:良品铺子手撕面包 知乎 编辑:程序博客网 时间:2024/06/11 01:44
<strong>经典的初级解法:</strong>
#include<iostream>using namespace std;class cMyString {private:char * m_pData;public:cMyString(const char * pData) {if(pData == NULL) {m_pData = new char[strlen(pData) + 1];m_pData[0] = '\0';}else {m_pData = new char[strlen(pData) + 1];strcpy(m_pData, pData);}}cMyString::cMyString(const cMyString &str){int length = strlen(str.m_pData);m_pData = new char[length + 1];strcpy(m_pData, str.m_pData);}cMyString& cMyString::operator = (const cMyString &str) {if(this == &str) {return *this;}delete []m_pData;m_pData = NULL;m_pData = new char[strlen(str.m_pData) + 1];strcpy(m_pData, str.m_pData);return *this;}cMyString(void) {if(m_pData != NULL) {delete[] m_pData;}}void cMyString::print() {printf("%s\n", m_pData);}};int main() {cMyString S1("");cMyString S3("sssss");cMyString S2(S3);cMyString S4 = S1;S1.print();S2.print();S3.print();S4.print();return 0;}
考虑异常安全性的解法:
在上述方法中, 我们先delete掉了m_pData中的内容, 如果此时内存不足以new出要求长度的m_pData时抛出异常, m_pData将是一个空指针, 很容易导致程序崩溃。
cMyString& cMyString::operator = (const cMyString &str) {if(this != &str) {cMyString strTemp(str);char* pTemp = strTemp.m_pData; //swap(m_pData, pTemp);strTemp.m_pData = m_pData;m_pData = pTemp;}return *this;}
0 0
- 面试题1 赋值运算符函数
- 面试题1:赋值运算符函数
- 面试题1:赋值运算符函数
- 面试题1:赋值运算符函数
- 面试题1:赋值运算符函数
- 面试题1:赋值运算符函数
- 面试题1:赋值运算符函数
- 面试题1:赋值运算符函数
- 面试题1:赋值运算符函数
- 【面试题1】赋值运算符函数
- 面试题1:赋值运算符函数
- 面试题1:赋值运算符函数深度剖析
- 面试题1------定义一个赋值运算符函数
- 《剑指Offer》面试题1:赋值运算符函数
- 剑指offer:面试题1 赋值运算符函数
- 剑指offer-面试题1:赋值运算符函数
- 剑指offer面试题1之赋值运算符函数
- 剑指offer-面试题1:赋值运算符函数
- Java:GOF的23种设计模式(下)
- 使用photoView完成照片查看器(网络图片)
- 依赖注入(IOC)的详细讲解,附带实例和测试结果(大师兄亲测)
- javaweb学习--导航
- 搬运自己一篇FFTW的文章
- 面试题1:赋值运算符函数
- scala-problem21-25
- Shader特效——“Distance 2D”的实现【ShaderToy】
- 64位Win 7配置VS2010使用openCV 2.4.11
- 游戏公司面试
- linux中chmod,chown,chgrp命令文件安全与权限
- c++面试题
- 在linux中使用head命令和tail命令查看文件中的指定行
- PHP中的socket函数