c++ 中关于析构函数调用的有关问题
c++ 中关于析构函数调用的问题
这段代码的运行结果是
Base 构造函数调用
Base 构造函数调用
Base 复制构造函数调用
Base 复制构造函数调用
Base 析构函数调用
Base 等号运算符重载调用
Base 析构函数调用
Base 析构函数调用
Base 析构函数调用
为什么最后的析构函数调用了三次 但把改为c= b 后最后的析构就调用了两次
------解决思路----------------------
正解!
楼主的 CreateBase是值传递,不是引用传递,调用函数会复制临时对象
#include <iostream>
using namespace std;
class Base
{
public:
Base(int m)
{
cout<<"Base 构造函数调用"<<endl;
this->m = m;
}
~Base()
{
cout<<"Base 析构函数调用"<<endl;
}
Base(const Base& c)
{
cout<<"Base 复制构造函数调用"<<endl;
m = c.m;
}
Base& operator= (const Base& c)
{
cout<<"Base 等号运算符重载调用"<<endl;
this->m = c.m;
return *this;
}
void GetM()
{
cout<<m<<endl;
}
void SetM(int w)
{
m = w;
}
private:
int m;
};
Base CreateBase(Base b)
{
return b;
}
int main()
{
Base b(10);
Base c(5);
c = CreateBase(b);
// c= b;
return 0;
}
这段代码的运行结果是
Base 构造函数调用
Base 构造函数调用
Base 复制构造函数调用
Base 复制构造函数调用
Base 析构函数调用
Base 等号运算符重载调用
Base 析构函数调用
Base 析构函数调用
Base 析构函数调用
为什么最后的析构函数调用了三次 但把改为c= b 后最后的析构就调用了两次
------解决思路----------------------
正解!
楼主的 CreateBase是值传递,不是引用传递,调用函数会复制临时对象