模拟实现string深拷贝的两个版本
来源:互联网 发布:开源房产cms 编辑:程序博客网 时间:2024/06/12 20:25
我们在http://write.blog.csdn.net/postedit/68495670博客中描述了string类的深浅拷贝问题,现在我们了解深拷贝两个版本,一个是传统写法,另一个是现代写法。
1,传统写法:
#include<iostream>using namespace std;class Mystring{public:Mystring(char* str)//初始化:_str(new char[strlen(str) + 1]){strcpy(_str, str);}Mystring(const Mystring& s)//深拷贝构造:_str(new char[strlen(s._str) + 1]){strcpy(_str, s._str);}Mystring& operator=(const Mystring& s)//赋值运算符的重载{if (this != &s)//防止自己给自己赋值{delete[] _str;_str = new char[strlen(s._str) + 1];strcpy(_str, s._str);}return *this;}~Mystring(){delete[] _str;_str = NULL;}protected:char _buffer[16];size_t _size;char* _str;size_t _capacity;};2,现代写法:
#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;class Mystring{public:Mystring(char* str):_str(new char[strlen(str) + 1]){strcpy(_str, str);}Mystring(const Mystring& s)//拷贝构造:_str(NULL){Mystring tmp(s._str);swap(_str, tmp._str);}Mystring& operator=(const Mystring& s){if (this != &s){Mystring tmp(s._str);swap(_str, tmp._str);}return *this;}~Mystring(){delete[] _str;_str = NULL;}protected:char _buffer[16];size_t _size;char* _str;size_t _capacity;};
阅读全文
0 0
- 模拟实现string深拷贝的两个版本
- String类深拷贝的模拟实现
- string类写时拷贝的模拟实现
- linux 模拟实现my_sleep的两个版本
- 【C++】模拟string类的实现(string 类的深拷贝)
- 实现深拷贝的String
- 【C++】简单实现String类--深拷贝的普通版本和简洁版本
- 【C++】面试题:模拟实现string类(版本一:用深度拷贝来实现 )
- 【C++】模拟实现string类(版本二:用写时拷贝来实现)
- 【C++】浅析浅拷贝,深拷贝及写时拷贝(copy_on_write),模拟实现String类。
- 模拟实现String类(1)_深拷贝
- 模拟实现String类---->写时拷贝
- C++中String类模拟实现以及深拷贝浅拷贝
- string类的简单实现(深拷贝,浅拷贝)
- String类的实现(深拷贝or浅拷贝)
- String的模拟实现
- String的深拷贝
- 模拟实现String类(2)——写时拷贝
- 剑指offer 23----二叉树的前序、中序、后序、层序遍历
- 2017年7月21日博雅培优幼小衔接班毕业校长讲话总结
- 关于一个判断Integer数是否为回文数的算法问题
- 关于Hash Map的工作原理与面试题的结合讨论
- Java学习【web基础-JSP案列-验证码】
- 模拟实现string深拷贝的两个版本
- git 删除一个远程分支
- 二层交换和三层交换
- Java线程安全总结(二)
- MINA2.0 原理
- UItextField占位符在中间
- 到底什么才是闭包
- 六角幻方
- 个人笔记 org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.