1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > C++网易云课堂开发工程师-拷贝构造 拷贝复制 析构函数

C++网易云课堂开发工程师-拷贝构造 拷贝复制 析构函数

时间:2021-04-02 17:20:16

相关推荐

C++网易云课堂开发工程师-拷贝构造 拷贝复制 析构函数

1.带有指针的ClassClass with pointer member

当类内带指针,一定自己写出拷贝构造函数。

String s1();

String s2("hello");

String s3(s1); 拷贝构造

s3=s2; 拷贝赋值

往往编译器会自动完成拷贝构造与拷贝赋值,不带有指针的可以一个数据成员一个数据成员的赋值。

但是带有指针时,会出现不同的效果。

2.Class String

class String{

public:

String(const char* cstr = 0);

String(const String& str); 接受自己本身,我们称之为拷贝构造

String& operator = (const String& str); 拷贝赋值

~String(); 析构函数

char* get_c_str() const {return m_data;}

private:

char* m_data;

}

3.ctor和dtor(构造函数和析构函数)

inline

String::String(const char* cstr = 0){

if(cstr){

m_data = new char[strlen(cstr) + 1];

strcpy(m_data, cstr);

}

else{ 未定义初值

m_data = new char[1];

*m_data = '\0';

}

}

inline 做动态分配后,一定要释放掉

String::~String(){

delete[] m_data; 搭配中括号的delete

}

4.类的创建与调用

{

String s1();

String s2("hello"); 离开作用域后,析构函数自然而然会被调用

String* p = new String("hello");

delete p;必须使用delete搭配删除

}

~~~~~~~~~~~一共要调用三次析构函数~~~~~~~~~~~~~

5.class with pointer members 必须有copy ctor和 copy op=

String a("hello"); 对应的是a---------->Hello\0

String b("World");对应的是b---------->World\0

使用default copy ctor 或者 default op= 会造成以下局面

a--------------->Hello\0<------------------bWorld\0浅拷贝

~~~~~~~必须完成深拷贝,主要是通过创建数据副本~~~~~~~~~

inline

String::String(const String& str){

m_data = new char[strlen(str.m_data) + 1]; 创建数据副本

strcpy(m_data, str.m_data);

}

~~~拷贝赋值,因为当前创建空间所以一定要清空自己,而后进行赋值~~~

~~~拷贝构造不需要完成清空自己是因为它刚刚创建出来的~~~~~~~~

inline

String& String::operator= (const String& str){

if(this == &str){ 检测自我赋值/如果这两行没有写检测,甚至会造成结果出错。

return *this;

}

delete[] m_data;

m_data = new char[strlen(str.m_data) + 1];

strcpy(m_data, str.m_data);

return *this;

}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

如果if语句没有写,会造成自己销毁自己,而不会完成赋值操作。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。