您的位置:首页 > 其它

深拷贝&浅拷贝

2016-03-12 18:54 337 查看
STRING.h文件

#pragma once
#include<string.h>
class String
{
public:

String(char* str="") //深拷贝
:_str(new char[strlen(str)+1])
{
strcpy(_str, str);
cout << "构造函数 " << endl;
}
~String()
{
if (_str!=NULL)
{
delete[]_str;
}
cout << "析构函数" << endl;
}
String(const String& s) //深拷贝
:_str(new char[strlen(s._str) + 1])
{
strcpy(_str, s._str);
cout << "拷贝构造函数" << endl;
}

/*String(const String& s)
:_str(NULL)
{
String tmp(s._str);
swap(_str, tmp._str);
}*/

String &operator=(const String& s)
{
if (this != &s) //传统写法,有弊端
{
/*delete[]_str;
_str = new char[(strlen(s.str) + 1)];//----如果没有空间怎么办
strcpy(_str, s._str);*/

char *tmp = new char[strlen(s._str) + 1];//现代写法
strcpy(tmp, s._str);
delete[] _str;
_str = tmp;

}
cout << "赋值运算符重载" << endl;
return *this;
}

private:
char* _str;
};

test.cpp文件

#include<iostream>
using namespace std;
#include"STRING.h"

int main()
{
String s1;
String s2("abcd");
s1 = s2;
String s3 = s2;
int i = 0;
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  浅拷贝 深拷贝