构造函数

inline
String::String(const char* cstr)
{if (cstr) {      //判断指针所指是否为空m_data = new char[strlen(cstr)+1];  //创建一个空间存放strcpy(m_data, cstr);       //拷贝}else {                   //空字符串处理m_data = new char[1]; //分配一个字符*m_data = '\0';       //将其设置为空}
}

析构函数

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

作用:释放对象在生存期分配的所有资源。
何时会调用析构函数:无论何时一个对象被销毁时,其成员函数被销毁。

为什么带指针的类要有拷贝构造和拷贝赋值

  1. 如仅仅使用编译器提供的函数,会造成浅拷贝,即两个对象的指针指向同一块内容,而被拷贝的对象会造成内存泄露。
  2. 两个对象的指针指向同一块内容是相当危险的,其中一个对象的修改会造成另一个对象的修改。

拷贝构造

Spring::Spring(const Spring& r)
{m_data = new char[strlen(r.m_data) + 1];strcpy(m_data, r.m_data);
}

深拷贝。收到的参数就是其自身类的引用。

拷贝复制

Spring& String::opeator = (const Spring& r)
{if(this == &r)          // 检测自我赋值return *this;   delete []m_data;     //第一步:将自身的空间释放m_data = new char[strlen(r.m_data) + 1];   //构建一个与复制的对象相同大小的空间strcpy(m_data, r.m_data);   //复制return *this;
}

Stack栈 Heap堆

Stack,是存在于某作用域的一块内存空间。例如当你调用函数,函数本身即会形成一个stack用来放置它所接收的参数,以及返回地址。
在函数本体内声明的任何变量,其所使用的内存块都取自上诉stack。
Heap,或称为system heap,是指由操作系统提供的一块global内存空间,程序可动态分配从某中获得若干区块。
用new动态的空间是从Heap中获得,需要自己进行回收处理
stack objects在作用域结束时被结束,会被自动清理。
stack local objects 如static Complex c2(1,2);作用域结束后还在,直到整个程序结束。

new:先分配memory,再调用ctor

Complex* pc = new Complex(1, 2);

编译器转化为:

void* mem = operator new(sizeof(Complex));  //分配内存,内部调用malloc(n)
pc = static_cast<Complex*>(mem);    //转型
pc->Complex::Complex(1, 2); //构造函数

delete:先调用dtor,在释放memory

String* ps = new String("Hello");
delete ps;

编译器转化为:

String::~String(ps);   //析构函数
operator delete(ps);    //释放内存,内部调用free(ps)

Static

静态数据: 在内存中有单独一份,只需要一份固定的数据时用。
静态函数: 没有this指针,只能处理静态数据

class Account{public:
static double m_rate;
static void set_rate(const double& x) {
m_rate=x;
}
double Account::m_rate=8.0;//**静态数据在class外要定义**

调用static函数的用法
(1)通过object调用(2)类名调用

模板

使用类模板时需要指出绑定是什么类型。
使用函数模板时不用指出类型,因为会根据参数的类型进行推导。

Geekban极客班 第二周相关推荐

  1. Geekban极客班 第三周

    复合 composition template<class T,class Sequence=deque<T> > class queue{... protected:Sequ ...

  2. 极客班C++ STL(容器)第二周笔记

    为什么80%的码农都做不了架构师?>>>    极客班 C++ STL (容器算法)第二周笔记 标签(空格分隔): C++ 1. 容器(下) 1.1 Stack a. 概述 Stac ...

  3. 极客班GeekBand - 互联网思维修炼 - 1

    极客班GeekBand - 互联网思维修炼 - 1 极客班GeekBand - 互联网思维修炼 - 1 讲师 - 陈世欣 名人看法 第一部分 产品探索 痛点思维 天使用户 天使用户可以加快对产品的探索 ...

  4. 马哥第3期运维班第二周作业

    1.Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示. 复制:cp cp [option] SRC... DEST SRC是单个文件: 如果DEST不存在,则新建DEST,并将S ...

  5. Java学习---第二周周报

    第二周周报 收获 关于第一周知识的查漏补缺 JDK,JRE,JVM 分别是什么,彼此之间的关系是怎么样的? JDK为Java语言的软件开发工具包,是整个Java的核心:包含JRE和JVM JVM是Ja ...

  6. 极客20届 第二周练习

    前言 第二周 相信大家已经学会一些基础语法了 但是可能对指针的理解 对结构体 链表等数据结构的认识 乃至类的认识 还有欠缺 于是这周我们将深入这部分内容 以题目为驱动来做些事情 另外按照惯例 每道题都 ...

  7. MindCon极客周 · 点亮城市接力活动正式启动!来为你的城市打Call,还有多重好礼相送!...

    12个城市的接力狂欢--MindCon极客周活动,今天正式启动啦!  12月14日 上海  首棒开跑的城市是上海,点Star通道已开启,今天(12.14)7:00-24:00在Gitee和GitHub ...

  8. 新浪微博回应热搜被暂停更新一周;即刻 APP 下架一年后恢复上线;Android 11 Beta 版发布| 极客头条...

    整理 | 屠敏 头图 | CSDN 下载自东方 IC 快来收听极客头条音频版吧,智能播报由出门问问「魔音工坊」提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极 ...

  9. ​微信Android版支持改微信号,淘宝硬核拒绝改名要求;5G 套餐价格松动;Kotlin 1.4 第二个预览版发布|极客头条...

    整理 | 屠敏 头图 | CSDN 下载自东方 IC 快来收听极客头条音频版吧,智能播报由出门问问「魔音工坊」提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极 ...

  10. 华为百度美团驰援抗击疫情;自由软件基金会建议开源 Windows 7;印度超越美国成第二大智能手机市场 | 极客头条...

    整理 | 唐小引 出品 | CSDN(ID:CSDNnews) 极客头条智能播报,由标贝科技提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好,今天是大年初三,全国新型 ...

最新文章

  1. 80后,从爱情,到婚姻
  2. 关于stm32的数据类型
  3. linux如何使用vim显示行号语法高亮,(.vimrc简单使用)
  4. 转-项目管理心得:一个项目经理的个人体会、经验总结
  5. jsp中session 和 cookies区别
  6. ambari 2.5.0源码编译安装
  7. Mybatis源码阅读(四):核心接口4.1——StatementHandler
  8. php简介及其发展,PHP 简介
  9. 安全认证Kerberos
  10. 北航计算机考研计算机组成原理,北航计算机组成原理讲义.pdf
  11. GNS3思科模拟器详细安装教程附下载链接
  12. Java面试学习资源
  13. html5-移动端布局模板
  14. 没有自制力的人,有什么资格谈努力?
  15. UCweb等手机浏览器的盈利模式
  16. 浮动与display:inline-block
  17. jquery方法之append()与appendto()
  18. 收藏-《连线》杂志:Web已死 Internet永生(全文)
  19. autojs发微信通知
  20. 华为发布新一代5G网络解决方案,加速5G生态发展

热门文章

  1. 新一配:如何对电脑配置进行评判【转载】
  2. 微信消息自动回复并汇总
  3. 【C语言】用C语言输出菱形
  4. 计算机相关的oa资源,计算机类OA期刊搜集与分析.pdf
  5. Lightbox JS(图片显示控件)
  6. 60万餐厅数据为你画出全国美食地图(附技术讲解)
  7. ele-calendar 日历插件使用
  8. 理论物理极础附录:有心力和行星轨道
  9. 前端报错http 405错误
  10. 全球定位经纬度的方法现在是GPS等系统定位,以前是指南针罗盘六分仪