内存泄漏-Delete不调用析构函数的两种情况
来源:互联网 发布:软件测试佩腾 编辑:程序博客网 时间:2024/05/17 22:42
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)
1. 所使用的类为预定义类
下面这段函数代码编译运行时没有问题的,不需要CPtr的定义
---PtrUser.h
class CPre; // 预定义class CPtrUser{public: CPreUser():m_pPtr(null); { } ~CPreUser() { <span style="BACKGROUND-COLOR: #ffcc33"><strong>delete m_pPtr;</strong></span> } void SetPtr(CPtr* p) { m_pPtr = p; }private: CPtr* m_pPtr;};
当在Main中使用时,delete时,我们或许认为 m_pPtr 的析构函数会被调用
---main.cpp
CPtrUser user = new CPtrUser();user->SetPtr(xxx);<span style="BACKGROUND-COLOR: #ffcc99">delete user;</span>
但实际上,如果PtrUser.h先被包含的话,delete m_pPtr时,是不会调用CPtr析构函数的
如果期望析构函数被调用,可以把 CPtr的定义放入到PtrUser.h中,这样C++编译器就能识别该类型,编译时,为delete添加析构函数调用
2. 转为父类,而父类没有声明virtual的虚析构函数
Parent* p = new Child();
delete p;
这种情况,Child的析构函数不会被调用。
class Parent{ };class Child : public Parent{public: Child() { } ~Child() { }}
要让被调用,可以简单修改为
class Parent{ public: virtual ~Parent() { };};
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)
0 0
- 内存泄漏-Delete不调用析构函数的两种情况
- 1、C++关于拷贝构造函数和赋值运算符重载问题的测试程序。因为调用顺序不清,导致内存泄漏new delete
- 内存泄漏的情况
- 内存泄漏的几种情况
- 内存泄漏的几种情况
- 内存泄漏的几种情况
- js内存泄漏的几种情况
- 导致内存泄漏的八种情况
- C++内存泄漏的几种情况
- 显式调用析构函数发生内存泄漏问题
- Android内存泄漏的情况
- 需显式调用析构函数的情况
- new 了以后,不delete ,真的会造成内存泄漏吗?
- COM 接口函数 BSTR 的使用,不泄漏内存
- 调用strcpy等函数时出现的内存泄漏问题
- C++中内存泄漏的几种情况
- C++中内存泄漏的几种情况
- js内存泄漏常见的四种情况
- 32位与64位下各类型长度对比
- [IOSB]StoryBoard简单使用
- 欢迎使用CSDN-markdown编辑器
- java基础之Integer和Long对象相等比较 .
- 构造函数析构函数为什么没有返回值?
- 内存泄漏-Delete不调用析构函数的两种情况
- solr的schema配置优化
- Web前端持续集成方案(三)
- iOS 9适配技巧(更新版)
- python打开自已配置的firefox
- mysql 的thread pool
- Android基础入门教程——2.5.2 Notification(状态栏通知)详解
- jQuery之滑动
- Android绘图机制(四)自定义控件