#include "stdafx.h"
#include<iostream>
#include<vector>
using namespace std;
int aaa = 0;
class A
{
public:
A()
{
m_a = aaa++;
printf("gouzao %d\n", m_a);
}
A(int a)
{
m_a = aaa++;
printf("带参构造 %d\n", m_a);
}
A(A &a)
{
//m_a = aaa++;
printf("拷贝构造 %d\n", m_a);
}
A& operator=(A &a)
{
m_a = aaa++;
printf("等号重载 %d\n", m_a);
return *this;
}
~A()
{
printf("exit %d\n", m_a);
}
void print()
{
printf("m_a = %d\n", m_a);
}
private:
int m_a;
};
A func(A a)
{
return a;
}
int main()
{
func(2); //写法1
//A a = func(2); //写法2
return 1;
}
代码中,如果按照main函数中的写法1,注释掉写法2. 则输出可以看到,会调用2次拷贝构造函数。
也就是当作为func的参数的时候会调用一次。当作为返回值的时候,还回调用一次。这个我是理解的。
但是当我采用写法2,注释掉写法1的时候,我认为在main()函数中A a = 这里还应该在调用一次拷贝构造函数。
但是输出结果确还是只调用了2次拷贝构造函数,包括函数执行完了以后的析构也是只看到调用了2次。
这里就不明白了。为什么最后的那次没有调用?求解答