qfedu-cpp-level/day3/d6.cpp

58 lines
1.1 KiB
C++
Raw Normal View History

// 拷贝构造函数的调用时机
// 编译器优化,不会调用拷贝构造函数,而是直接创建一个返回值的引用
#include <iostream>
using namespace std;
class A
{
public:
int x = 0;
public:
A()
{
cout << this << " A()" << endl;
}
A(const A &other)
{
this->x = other.x;
cout << this << " A(const A &other)" << endl;
}
~A()
{
cout << this << " ~A()" << endl;
}
};
void test1(A a) // ?是否调用拷贝构造函数
{
cout << "test1(A a) a.x = " << a.x << endl;
// 当函数结束时a 释放,会调用析构函数
}
A test2()
{
A a1; // 局部的类对象, 没有执行拷贝构造函数
a1.x = 1;
cout << "test2() a1.x = " << a1.x << endl;
return a1; // 释放局部对象 a1
}
void test3()
{
A a2 = test2(); // 返回 A 类的对象,没有调用拷贝构造函数,只是创建了一个 test2() 返回值的引用
cout << "test3() a2.x = " << a2.x << endl;
}
int main()
{
A a0;
// test1(a0); // 作为值传递,调用拷贝构造函数
test3();
cout << "over" << endl;
return 0;
}