美文网首页
Boolan Week2笔记

Boolan Week2笔记

作者: Impluse | 来源:发表于2017-10-29 18:35 被阅读0次

这周课程主要讲解了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。

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

相关文章

  • Week2(Boolan)

    不带指针的字符串 编译器有默认的拷贝构造和拷贝赋值函数,以位为单位。但在class without pointer...

  • (Boolan)Week2

    1.赋值重载函数 形式如下: String::operator =(const String& str) 1由于进...

  • Boolan Week2笔记

    这周课程主要讲解了Big Three的用途写法和注意事项以及内存管理。 当没有手动编写三大函数时,编译器会使用默认...

  • Boolan 设计模式-week2

    单一职责 装饰模式:动态地给一个对象增加一些额外的职责。 http://blog.csdn.net/wuzheka...

  • C++面向对象高级编程(上)-第一周笔记 | Boolan

    笔记时间:2017-10-09 ~ 2017-10-23 来源:网易云课堂 / Boolan / GeekBan...

  • C++设计模式 week2 (Boolan)

    "对象创新"模式 通过"对象创建"模式绕开new, 来避免对象创建(new)过程中所导致的紧耦合(依赖具体类), ...

  • C++面向对象 Week2——Boolan

    一、类可以分为带指针的与不带指针的两种形式,上周已经回顾不带指针的类的写法。 对于带指针的类,除了考虑其一般的构造...

  • 无标题文章

    Boolan-C++面向对象高级编程(上)第三周笔记 类与类之间的关系 一.继承inheritance:is a ...

  • C++笔记第一周(Boolan)

    C++笔记第一周(Boolan) 头文件的防卫式声明: 函数在class body里定义完成则默认inline 函...

  • 日出時分@2018(7-13/01/2018)

    Week2/52

网友评论

      本文标题:Boolan Week2笔记

      本文链接:https://www.haomeiwen.com/subject/nzwypxtx.html