如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉 在STL中容器是智能的,可以在容器销毁时自动调用容器里对象的析构函数来销毁容器存储的对象。 STL的容器虽然比较智能,但是没有智能到可以自动销毁new出来的指针对象。 所以在使用STL中的容器时,如果保存的是mew出 ...
分类:
其他好文 时间:
2018-12-24 03:02:48
阅读次数:
137
定义一个基类的指针p,在delete p时,如果基类的析构函数是虚函数,这时只会看p所赋值的对象,如果p赋值的对象是派生类的对象,就会调用派生类的析构函数(毫无疑问,在这之前也会先调用基类的构造函数,在调用派生类的构造函数,然后调用派生类的析构函数,基类的析构函数,所谓先构造的后释放);如果p赋值的 ...
分类:
其他好文 时间:
2018-12-17 02:27:03
阅读次数:
157
虚析构函数 通过基类的指针删除派生类对象时,通常情况只调用基类的析构函数 但是,删除一个派生类对象时,应该先调用派生类的析构函数,然后调用基类的析构函数(构造时自顶向下,析构时自底向上) 这种情况会产生内存泄漏,最终导致系统应可用内存不足而崩溃 解决办法 把基类的析构函数声明为virtual,此时派 ...
分类:
其他好文 时间:
2018-11-13 00:17:03
阅读次数:
369
0.引言: 目的:使用智能指针替代LinkList中的原生的指针, 限制:但是我们的智能指针设定了只能单个指针指向某一片堆空间 1. 智能指针的继承层次结构 (1)Pointer是智能指针的抽象父类(模板) ①纯虚析构函数:virtual ~Pointer()=0; ②重载operator->() ...
分类:
其他好文 时间:
2018-10-09 20:03:48
阅读次数:
144
结论: 对于没有数据成员的对象,其内存单元也不是0,c++用一个内存单元来表示这个实例对象的存在。 如果有了数据或虚函数(虚析构函数),则相应的内存替代1标记自己的存在。 PS:以下代码均在win32控制台下运行。 e.g.1 运行后输出1。 e.g.2 运行后输出4。 e.g.3 运行后输出4。 ...
分类:
编程语言 时间:
2018-07-20 16:52:48
阅读次数:
145
Virtual 关键字起到什么作用 借鉴网友blog, 了解了虚析构函数的作用: 虚析构函数是为了避免内存泄露,而且是当子类中会有指针成员变量时才会使用得到的。 也就说虚析构函数使得在删除指向子类对象的基类指针时可以调用子类的析构函数达到释放子类中堆内存的目的,而防止内存泄露的。 c++中的函数调用 ...
分类:
编程语言 时间:
2018-07-19 13:42:28
阅读次数:
198
1 //虚析构函数的学习 2 //如果外部程序使用new运算符定义了动态对象,则当外部程序结束时,要使用delete运算符删除该动态对象. 3 //但是如果外部程序利用赋值兼容原则,把动态申请的派生类对象地址赋给了基类对象指针,由于delete运算符隐含有析构函数的自动调用 4 //因此此时系统自动... ...
分类:
编程语言 时间:
2018-07-01 18:21:27
阅读次数:
150
学习资料 ? C++中基类的析构函数为什么要用virtual虚析构函数 虚析构函数 1. 正文 直接的讲,C++中基类采用virtual虚析构函数是为了防止内存泄漏。具体地说,如果派生类中申请了内存空间,并在其析构函数中对这些内存空间进行释放。假设基类中采用的是非虚析构函数,当删除基类指针指向的派生 ...
分类:
编程语言 时间:
2018-06-22 20:35:35
阅读次数:
178
虚函数作用:动态绑定,实现多态效果。 场景问题: 派生类中有资源需要回收,而在编程中采用多态,由基类的指针指向派生类,则在释放的时候,如果基类的析构函数不是virtual,则派生类的析构函数得不到释放 总结: C++中基类采用virtual虚析构函数是为了防止内存泄漏。具体地说,如果派生类中申请了内 ...
分类:
其他好文 时间:
2018-06-11 11:02:46
阅读次数:
199