随笔分类 -  C++学习

摘要:一、关键 每个shared_ptr所指向的对象都有一个引用计数,它记录了有多少个shared_ptr指向自己 shared_ptr的析构函数:递减它所指向的对象的引用计数,如果引用计数变为0,就会销毁对象并释放相应的内存 引用计数的变化:决定权在shared_ptr,而与对象本身无关 二、引用计数初 阅读全文
posted @ 2017-11-17 17:26 GGBeng 阅读(7001) 评论(1) 推荐(2) 编辑
摘要:一、关键 内存分配:union各成员共享一段内存空间,即任一时刻只能有一个成员可以有值(故分配给一个union对象的存储空间至少要能容纳它的最大的数据成员) union与类:union是一种节省空间的类,但并非类的所有特性都适用于它(如其不能有引用类型的成员) 匿名union:其成员的作用域与它的作 阅读全文
posted @ 2017-11-17 11:36 GGBeng 阅读(352) 评论(0) 推荐(0) 编辑
摘要:一、关键点 虚析构函数的必要性(为何需要?哪里需要?) 虚构函数的特性 二、虚析构函数的必要性 基类通常应该定义一个虚析构函数(当然不是必须要虚析构函数),这是继承关系对基类拷贝控制最直接的影响 为何需要:这样我们就能动态分配继承体系中的对象,如delete一个指向派生类对象的基类指针时,虚析构函数 阅读全文
posted @ 2017-11-16 23:03 GGBeng 阅读(282) 评论(0) 推荐(0) 编辑
摘要:一、关键点 转换构造函数:传送门之explicit构造函数 类类型转换运算符 二、转换构造函数——隐式的类类型转换 转换构造函数:该构造函数只接受一个实参,它实际定义了从构造函数的参数类型向类类型隐式转换的规则 重点是:如何使用该条规则 上面“book3 = isbn;”语句包含string类型向S 阅读全文
posted @ 2017-11-15 23:43 GGBeng 阅读(415) 评论(0) 推荐(0) 编辑
摘要:前言 关联容器并不值得写一篇讲解的文章,它只是部分细节需要熟能生巧。 一、关键点 向map、set中添加元素 使用map、set 关联容器的元素类型 二、关联容器支持的类型别名 对于set,与key_type相同 对于map,为pair<const key_type, mapped_type> 使用 阅读全文
posted @ 2017-11-14 22:58 GGBeng 阅读(233) 评论(0) 推荐(0) 编辑
摘要:第一章 开始 类型:程序所处理的数据都保存在变量中,而每个变量都有自己的类型 内置类型:语言自身定义的类型(而形如string等类型都是标准库定义的) main的返回值:0表示成功,非0指出错误类型 从命令行运行编译器 for语句 术语表:缓冲区、cerr、clog、表达式 第一部分 C++基础 第 阅读全文
posted @ 2017-11-12 16:30 GGBeng 阅读(2056) 评论(0) 推荐(0) 编辑
摘要:何时使用:使用存在继承关系的类型时,必须将一个变量或其他表达式的静态类型与该表达式表示对象的动态类型区分开来 静态类型:表达式的静态类型在编译时总是已知的,它是变量声明时的类型或表达式生成的类型 动态类型:动态类型直到运行时才可知,(变量或)表达式表示的内存中的对象的类型 如果表达式既不是引用也不是 阅读全文
posted @ 2017-11-12 14:53 GGBeng 阅读(1152) 评论(0) 推荐(0) 编辑
摘要:一、关键点 虚函数:某些成员函数,基类希望它的派生类各自定义适合自身的版本 任何构造函数之外的非static函数都可以是虚函数 关键字virtual只能出现在类内部的声明语句之前而不能用于类外部的函数定义 一旦某个函数被声明成虚函数,则在所有派生类中它都是虚函数 派生类必须在其内部对所有重新定义的虚 阅读全文
posted @ 2017-11-12 14:14 GGBeng 阅读(312) 评论(0) 推荐(0) 编辑
摘要:一、拷贝控制操作之于类 作用:定义类对象拷贝、移动、赋值或销毁时做什么 没有定义:编译器会为我们定义,但合成版本的行为可能并非我们所想 二、拷贝构造函数 1. 每个成员的类型决定了它如何拷贝 类类型的成员,会使用其拷贝构造函数来拷贝;内置类型的成员则直接拷贝。 对于数组,合成拷贝构造函数会逐元素地拷 阅读全文
posted @ 2017-11-12 00:04 GGBeng 阅读(727) 评论(0) 推荐(0) 编辑
摘要:一、谓词&向算法传递函数 1. 某些算法其中一个参数可以是谓词 2. 谓词:一个可调用的表达式,其返回结果是一个能用作条件的值 如函数cmp就是一个谓词(返回能作为条件的bool值,能调用cmp(a, b)) 接受谓词参数的算法对输入序列中的元素调用谓词,如cmp(vec.begin(), vec. 阅读全文
posted @ 2017-11-11 10:12 GGBeng 阅读(256) 评论(0) 推荐(0) 编辑
摘要:一、关键点 0. 枚举类型&&枚举成员&&枚举值 枚举类型:enum类型,如color就是一个枚举类型,我们可以定义color类型的对象(color flower = red;) 枚举成员:red、blue、yellow都是枚举成员,它们是整型const的,即它们本身就是常量表达式,而初始化它们也需 阅读全文
posted @ 2017-11-08 21:48 GGBeng 阅读(585) 评论(0) 推荐(0) 编辑
摘要:一、解引用 谈到箭头运算符,就离不开指针 我们知道指针不是重点,重点是指针指向的对象,我们可以通过指针来获得指针指向的对象 获得指针指向的对象 == 解引用 方式一:箭头运算符(假设p是一个指针) p->:代表p指向的对象 方式二:解引用运算符 *p:代表p指向的对象 二、更多 我们知道*p后常常跟 阅读全文
posted @ 2017-11-04 09:59 GGBeng 阅读(936) 评论(0) 推荐(0) 编辑
摘要:一、protected成员 1. 受保护的成员的可访问性 对于一个类的protected成员,①该类的用户(如类对象)不能访问它,②该类的派生类的成员(及其友元)可以访问它。 派生类的成员及其友元不能访问其基类对象的受保护成员,它们只能访问继承到派生类对象中的受保护成员 派生类的成员及其友元只能访问 阅读全文
posted @ 2017-11-03 17:19 GGBeng 阅读(358) 评论(0) 推荐(0) 编辑
摘要:1. 类怎么变为聚合类 所有成员是public的 没有定义构造函数 没有类内初始值 没有基类和virtual函数 2. 特点 可以显式地初始化类的对象的成员 用户可以直接访问其成员 阅读全文
posted @ 2017-10-30 16:40 GGBeng 阅读(246) 评论(0) 推荐(0) 编辑
摘要:前面是扫盲部分,可直接看后面的精华部分。 /* 扫盲 一、隐式的类类型转换 1. 转换构造函数 如果构造函数只接受一个实参,则它实际上定义了转换为此类类型的隐式转换机制 能通过一个实参调用的构造函数定义了一条从构造函数的参数类型向类类型隐式转换的规则 2. 从参数类型向类类型隐式转换的实例 【从is 阅读全文
posted @ 2017-10-30 16:36 GGBeng 阅读(4716) 评论(0) 推荐(0) 编辑
摘要:一、动态数组 【new的局限性】 new将内存分配和对象构造组合在一起,同样delete将对象析构和内存释放组合在一起 我们分配单个对象时,通常希望将内存分配和对象初始化组合在一起(我们知道对象应有什么值),但分配一大块内存时,我们往往计划在这块内存上按需构造对象→将内存分配和对象构造分离,即我们可 阅读全文
posted @ 2017-10-29 19:49 GGBeng 阅读(405) 评论(0) 推荐(0) 编辑
摘要:一、运算符new 1. 使用new动态分配对象 在自由空间分配的内存是无名的,故new无法为其分配的对象命名,而是返回一个指向该对象的指针 int *pi = new int; //pi指向一个动态分配的、未初始化的无名对象 表达式“new int”:①在自由空间构造一个 int 型对象;②返回指向 阅读全文
posted @ 2017-10-26 17:53 GGBeng 阅读(287) 评论(0) 推荐(0) 编辑
摘要:一、智能指针类型&智能指针 1. 标准库提供了两种智能指针类型(来管理动态分配的对象) 2. 智能指针 智能指针就是一个变量、一个对象,即智能指针类型的实例化(比如在整型 int 和变量 i 中,智能指针就类似 i) 3. 智能指针与指针 智能指针的行为类似常规指针 区别:智能指针负责自动释放所指向 阅读全文
posted @ 2017-10-26 10:33 GGBeng 阅读(462) 评论(0) 推荐(0) 编辑
摘要:一、对象的生存期 对于 static 对象和自动对象,它们都有着严格定义的生存期。 全局对象:在程序启动时分配,在程序结束时销毁。 局部自动对象:在对象定义语句时分配,在离开块时销毁 局部 static 对象:在对象定义语句时分配,在程序结束时销毁 对于动态分配对象,其生存期与它们在哪里创建是无关的 阅读全文
posted @ 2017-10-26 10:02 GGBeng 阅读(255) 评论(0) 推荐(0) 编辑
摘要:一、特性 1. 这是一种标准库类型 2. 是两个指针相减的结果的类型(因为差值可能为负值,所以是一种带符号类型) 3. 和size_t一样,ptrdiff_t也是一种定义在<cstddef>头文件中的机器相关的类型 4. 示例:ptrdiff_t = end(arr) - begin(arr); 阅读全文
posted @ 2017-10-21 23:03 GGBeng 阅读(392) 评论(0) 推荐(0) 编辑