模拟实现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