c++ 中关于析构函数调用的有关问题

c++ 中关于析构函数调用的问题
#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 后最后的析构就调用了两次
------解决思路----------------------
引用:
有临时对象

你试试将Base CreateBase(Base b) 改成 Base CreateBase(Base& b)

函数参数 压栈会临时对象产生


正解!

楼主的 CreateBase是值传递,不是引用传递,调用函数会复制临时对象