转:https://www.cnblogs.com/ktao/p/7563289.html 1. 为什么构造函数不能为虚函数? 虚函数的调用需要虚函数表指针,而该指针存放在对象的内存空间中;若构造函数声明为虚函数,那么由于对象还未创建,还没有内存空间,更没有虚函数表地址用来调用虚函数——构造函数了。 ...
分类:
其他好文 时间:
2020-05-14 19:36:26
阅读次数:
74
构造函数、析构函数和赋值函数是类的“Big-Three”。 每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数)。对于任意一个类A,如果不想编写上述函数,C++编译器将(仅在需要的时候)自动为A产生四个缺省的函数: A(void); //缺省的无 ...
分类:
其他好文 时间:
2020-05-13 12:14:38
阅读次数:
56
1、shared_ptr 1、shared_ptr多个指针指向相同的对象。shared_ptr使用引用计数,每个shared_ptr的拷贝 都指向相同的能存。每次使用它一次,该对象内部的引用计数加1,指向该对象的shared_ptr指针 每减少一个,该对象内部的引用计数就减1,当引用计数为0时,就自 ...
分类:
其他好文 时间:
2020-05-12 09:42:26
阅读次数:
78
平衡二叉树 二叉树中所有结点的平衡因子 的绝对值均小于等于 ,即:$|BF|\leq1$。平衡因子是,结点的左子树高度减去右子树的高度。平衡因子 绝对值大于 表示二叉树失衡。 插入失衡 两种情况: 1. 结点的平衡因子是 ,向该结点的左子树插入结点,该结点的平衡因子变为 ,导致失衡; 2. 结点的平 ...
分类:
其他好文 时间:
2020-05-05 00:33:31
阅读次数:
56
不要将函数的返回值设为&&, std::string &&get(){ std::string s = "str";return std::move(s); } 代码中返回的字符串s在函数返回时就已经离开作用域调用析构函数,函数的得到的返回值其实是一个野指针。 ...
分类:
其他好文 时间:
2020-05-03 14:57:13
阅读次数:
60
/* 为了编写任意代码以在异常发生后执行清理工作, 人们曾经设计了很多"最终的"语言概念。 首先我们定义一个类,它在析构函数中执行任意操作。 */ template <typename F> struct Final_action{ Final_action(F f): clean{f}{} ~Fi ...
分类:
其他好文 时间:
2020-04-30 11:57:48
阅读次数:
70
类的声明 类的初始化 构造函数 作用:在创建对象时自动对其初始化 析构函数 作用:清除对象,释放内存 在没有显式声明而需要删除对象时,编译器会隐式地声明一个默认析构函数 this指针 this 指针的使用场景 头文件 固定格式,防止该头文件被同一源文件多重调用 标识的命名规则: 1.使用头文件名称 ...
分类:
编程语言 时间:
2020-04-29 23:11:10
阅读次数:
68
1. malloc/free 是标准库函数,new/delete是C++运算符 2. malloc失败返回空,new失败抛出异常 3. new/delete会调用构造,析构函数,malloc/free不会 4. new返回有类型的指针,malloc返回无类型的指针 5. 使用new操作符申请内存分配 ...
分类:
其他好文 时间:
2020-04-29 00:53:34
阅读次数:
60
一:概述: (1): 1:在C++中,堆分配的概念得到了扩展,不仅C++的关键字new和delete可以分配和释放堆空间,而且通过new建立的对象要调用构造函数,通过delete删除对象也要调用析构函数。 (2):c++程序的内存分配机制: (1):c++程序的内存格局分为四个区, 1:全局数据区 ...
分类:
其他好文 时间:
2020-04-27 09:16:47
阅读次数:
66
纯虚类中,纯虚析构函数。 由于子类会调用父类析构,所以春虚析构函数不同于其他纯虚函数,不只是要声明,还需要实现。 否则编译会异常。 例如 class Session:{ public: Session(); virtual ~Session()=0; } Session::~Session(){} ...
分类:
编程语言 时间:
2020-04-26 11:12:25
阅读次数:
72