c++入门篇七

拷贝构造函数的调用时机:

class  Person {
public:
    //构造函数
    Person() {
        //无参构造函数
    }
    Person(int  a) {
        //有参构造函数
        cout << "有参构造函数" << endl;
    }
    Person(const  Person  &p) {
        //拷贝构造函数,前面必须加const,拷贝过来的不能再修改了,固定的,就是说你拷贝过来了张三,不能再修改成张四(p.name=""),只能是原版张三
        //传过来的&p是对象,p就是指针
        age = p.age;//age被赋值
        cout << "拷贝构造函数" << endl;
    }
    ~Person()
    {
        cout << "析构函数" << endl;
    }
    int  age;
};

第一种:使用已经创建好的对象来初始化新的对象

void  test01() {
    //拷贝构造函数的几种方式
    //第一种方式:直接赋值拷贝对象
    Person  p1;
    p1.age = 33;//已经创建好了对象 
    Person p2 = p1;//相当于拷贝了p1给p2
    fun(p2);

第二种方式:值传递的方式拷贝

//第二种方式:值传递的方式拷贝
void  fun(Person &p1) {//相当于Person  p=Person(p2),拷贝构造函数,建议使用引用,节省一份新的开销,不用新的内存空间
    cout << "fun函数:" << p1.age << endl;

}
void  test01() {
    Person  p1;
    p1.age = 33;//已经创建好了对象 
    Person p2 = p1;//相当于拷贝了p1给p2
    fun(p2);//传递p2给fun函数

第三种方式:以值方式返回局部对象

//第三种:以值方式返回局部对象int xxx(){},Person  xxx(){},结构体或者是函数的话,都可以不去加()
Person  fun1() {
    Person  p;
    p.age = 3333;
    return  p;
}
    //第三种方式:
    Person  p3 = fun1();

release模式下会做优化,debug模式下没有做优化

release模式下结果:第三种方式的

猜你喜欢

转载自www.cnblogs.com/yunxintryyoubest/p/10682698.html