C++析构函数自动调用,引发的一个bug
2016-01-30 16:46
351 查看
最近做一个项目,在调试bug时,总结出了一个C++的析构函数被调用的时机,写此博客,免得以后再犯此类错误。
类的定义:
类的实现:
主函数文件:
执行结果:
如果这样定义int Func(CTest1* ct),则执行结果才是预期。
总结一下。实例为非类的指针,析构在离开函数后,会自动执行,即使定义来自函数参数。
项目中为了防止此类错误,能使用delete控制执行析构函数的,最好使用delete.
类的定义:
#include <iostream> class CTest1 { public: CTest1(); ~CTest1(); int Func1(); };
类的实现:
#include "Test1.h" CTest1::CTest1() { std::cout << "CTest1()" << std::endl; } CTest1::~CTest1() { std::cout << "~CTest1()" << std::endl; } int CTest1::Func1() { std::cout << "Func1()" << std::endl; return 1; }
主函数文件:
int Func(CTest1 ct) { int iret = ct.Func1(); return iret; } int main() { CTest1 ct; for (int i = 0; i < 3; ++i) { Func(ct); } getchar(); return 0; }
执行结果:
CTest1() Func1() ~CTest1() Func1() ~CTest1() Func1() ~CTest1()
如果这样定义int Func(CTest1* ct),则执行结果才是预期。
总结一下。实例为非类的指针,析构在离开函数后,会自动执行,即使定义来自函数参数。
项目中为了防止此类错误,能使用delete控制执行析构函数的,最好使用delete.
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- SourceProvider.getJniDirectories
- 关于指针的一些事情
- Trac 中文语言安装
- c++ primer 第五版 笔记前言
- 软件 bug 的生命周期
- share_ptr的几个注意点
- Firefox2中输入框丢失光标bug的解决方法
- for命令的一些bug分析
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- 修正IE下使用CSS属性overflow的bug
- 解决IE6 3像素Bug的css写法
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析