C++析构函数自动调用,引发的一个bug
来源:互联网 发布:英雄联盟观战软件 编辑:程序博客网 时间:2024/05/21 09:36
最近做一个项目,在调试bug时,总结出了一个C++的析构函数被调用的时机,写此博客,免得以后再犯此类错误。
类的定义:
#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.
0 0
- C++析构函数自动调用,引发的一个bug
- 一个BUG引发的...
- 一个调用函数引发的超时!
- c语言非线程安全函数引发的BUG一列
- 一个BUG引发的思考
- 一个bug引发的感想
- 一个bug引发的“血案”
- 【C++】指针引发的bug
- 由显式调用析构函数引发的思考
- 一个delete和析构函数引发的coredump
- 一个bug引发的血案(大爆炸)
- 一个失误引发的奇怪线程BUG
- 一个Date对象引发的诡异bug
- 一个“-1.#INF000”引发的bug
- 一个移位操作引发的程序Bug
- 一个iOS bug引发的思考
- 一个由CountDownLatch引发的Bug
- 一个bug引发的哲学思考
- 树状数组
- 工厂三姐妹——简单工厂模式
- 如何在mysql 的存储过程中使用事务
- 项目中用到的js日期函数
- 廖雪峰的个人站点:里面有他写的 python javascript git 教程。很不错的样子
- C++析构函数自动调用,引发的一个bug
- 蓝桥杯 P1001(大数乘法)
- smp boot up sequence
- 业务分析(1)——杭州市2015年是否存在暖冬现象
- 深入leveldb-初步认识leveldb
- python学习笔记之四
- NOIP2007:守望者的逃离
- 【观点】语言交流将是人工智能拟人化的核心
- 【Linux入门学习之】vim编辑器---批量注释与反注释