深拷贝&浅拷贝

2023-06-28,,

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;

}

《深拷贝&浅拷贝.doc》

下载本文的Word格式文档,以方便收藏与打印。