#include <iostream>
using namespace std;
class A
{
public:
int val;
public:
A(int v = 0) : val(v)
{
cout << "A()\t" << val << endl;
}
~A()
{
cout << "~A()\t" << val << endl;
}
A(const A& t) : val(t.val)
{
cout << "A(const A& t)" << val << endl;
}
A& operator=(const A& t)
{
val = t.val;
cout << "A& operator=(const A& t)" << endl;
return *this;
}
// A(A&& t) : val(t.val)
// {
// cout << "A(A&& t)" << val << endl;
// }
// A& operator=(A&& t)
// {
// val = t.val;
// cout << "A& operator=(A&& t)" << endl;
// return *this;
// }
};
A Double(A& src)
{
A tmp(src.val * 2);
return tmp;
}
int main()
{
A a1(10);
A a2 = Double(a1);
return 0;
}
运行结果
A() 10
A() 20
A(const A& t)20
~A() 20
A(const A& t)20
~A() 20
~A() 20
~A() 10
#include <iostream>
using namespace std;
class A
{
public:
int val;
public:
A(int v = 0) : val(v)
{
cout << "A()\t" << val << endl;
}
~A()
{
cout << "~A()\t" << val << endl;
}
A(const A& t) : val(t.val)
{
cout << "A(const A& t)" << val << endl;
}
A& operator=(const A& t)
{
val = t.val;
cout << "A& operator=(const A& t)" << endl;
return *this;
}
A(A&& t) : val(t.val)
{
cout << "A(A&& t)" << val << endl;
}
A& operator=(A&& t)
{
val = t.val;
cout << "A& operator=(A&& t)" << endl;
return *this;
}
};
A Double(A& src)
{
A tmp(src.val * 2);
return tmp;
}
int main()
{
A a1(10);
A a2 = Double(a1);
return 0;
}
运行结果
A() 10
A() 20
A(A&& t)20
~A() 20
A(A&& t)20
~A() 20
~A() 20
~A() 10
总结
移动构造优先级高
编译指令:g++ demo02.cpp -o demo02.out -Wall -fno-elide-constructors