首页 > 编程语言 > 详细

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

时间:2020-02-14 10:16:35      阅读:58      评论:0      收藏:0      [点我收藏+]

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. 防止错误调用。其原因如下图所示,

 技术分享图片

 

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

原文:https://www.cnblogs.com/gdut-gordon/p/12306092.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!