Boolan Week2笔记

这周课程主要讲解了Big Three的用途写法和注意事项以及内存管理。

当没有手动编写三大函数时,编译器会使用默认的一套,operator=的默认会依次复制。如果是基本数据类型自然没什么问题,但当数据成员含有指针的时候,operator的只会进行浅复制,即只是指针本身被复制,而不是指针所指向的内容被复制。为了进行深复制,需要我们单独编写。

即 class with point members 必须有 copy ctor 和 copy op= 和析构函数。

Boolan Week2笔记_第1张图片

1.析构函数

~String();

inline String::~String()  { delete[ ] m_data; }

当一个对象超出作用域 或执行delete的时候,析构函数就被调用。

2.复制构造函数

inline String::String(const String& str)

{

m_data = new char[ strlen(str.m_data) + 1 ]; //分配空间

strcpy(m_data, str.m_data);  //复制内容

3.operate=

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;

}


Boolan Week2笔记_第2张图片

关于内存管理:

栈一般优于堆。

array new一定要搭配 array delete。


由于算是半个初学者,并不能提出什么自己的理解,会努力学习研读前辈们的著作和代码。

你可能感兴趣的:(Boolan Week2笔记)