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
原创粉丝点击