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”修改为:
代替
我们得到: CONSTR WAS HERE COPY CONSTR WAS HERE DESTR WAS HERE DESTR WAS HERE DESTR WAS HERE 我不太清楚为什么 解决方法
启用警告:
你的程序中有undefined behavior,这意味着任何事情都可能发生.编译器很可能“在这里返回一个未定义的C1实例”,这会导致析构函数被调用. 程序可能会崩溃或执行任何其他操作,具体取决于您的编译器/标志/机器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |