加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C – 析构函数的调用次数比预期的多

发布时间:2020-12-16 10:51:43 所属栏目:百科 来源:网络整理
导读:考虑以下代码: class C1{ public: C1(){ cout"CONSTR WAS HERE"endl; } C1(const C1ob){ cout"COPY CONSTR WAS HERE"endl; } ~C1(){ cout"DESTR WAS HERE"endl; }}void f1(C1 x){ }int main(){ C1 c1; f1(c1);} 如果我们按原样运行代码,我们得到: CONSTR W
考虑以下代码:

class C1
{   public:

        C1(){ cout<<"CONSTR WAS HERE"<<endl; }

        C1(const C1&ob){ cout<<"COPY CONSTR WAS HERE"<<endl; }

        ~C1(){ cout<<"DESTR WAS HERE"<<endl; }
}

void f1(C1 x){  }

int main()
{
    C1 c1;
    f1(c1);
}

如果我们按原样运行代码,我们得到:

CONSTR WAS HERE
COPY CONSTR WAS HERE
DESTR WAS HERE
DESTR WAS HERE

从我的观点来看,这是完全可以理解的.但是,如果我们将函数“f1”修改为:

C1 f1(C1 x){ }

代替

void f1(C1 x){ }

我们得到:

CONSTR WAS HERE
COPY CONSTR WAS HERE
DESTR WAS HERE
DESTR WAS HERE
DESTR WAS HERE

我不太清楚为什么

解决方法

启用警告:

warning: no return statement in function returning non-void [-Wreturn-type]

你的程序中有undefined behavior,这意味着任何事情都可能发生.编译器很可能“在这里返回一个未定义的C1实例”,这会导致析构函数被调用.

程序可能会崩溃或执行任何其他操作,具体取决于您的编译器/标志/机器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读