C++ 面向对象高级开发 -- string

1. Object Based(基于对象) vs. Object Oriented(面向对象)

Object Based: 面对的是单一class的设计;

Object Oriented:面对的是多重classes的设计,class 和 class 之间的关系。

classes 的两个经典分类:

  • class without pointer members -- complex
  • class with pointer members -- string

2. 设计 string

  2.1 防卫式声明

  2.2 Big Three

若类内有指针成员,则一定要重写 拷贝构造函数,赋值构造函数和析构函数,即Big Three,执行深拷贝操作。编译器默认生成的 拷贝构造函数和赋值构造函数 只会进行浅拷贝

由于未能确定string对象的大小,因此类内提供一个指针成员,指向动态内存。

  2.3 ctor 和 dtor

注意!在析构函数中,调用 delete [] m_data; 释放内存。

在右下角的函数应用中,一旦离开作用域 {} , s1 和 s2 自动调用析构函数释放内存。由于 p 是动态分配的内存,其生命周期在整个程序运行周期内。p 要到程序结束运行后,由系统自动回收泄露的内存。

   2.4 copy ctor 和 copy op=

拷贝构造函数

拷贝赋值函数

分3个步骤:

  1. 释放源对象动态内存;
  2. 重新分配动态内存空间;
  3. 拷贝动态内存中的内容;

其中,检测自我赋值有2层用意。

  1. 提高效率;
  2. 防止错误调用。其原因如下图所示,

 

猜你喜欢

转载自www.cnblogs.com/gdut-gordon/p/12306092.html