Boolan Week2笔记

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

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

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


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;

}


关于内存管理:

栈一般优于堆。

array new一定要搭配 array delete。


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容