拷贝构造函数调用时机

这里讨论两种情况下的拷贝函数调用:

  • 作为参数传值过程中的拷贝函数调用,有一个Dog类,d1是Dog类的一个实例现在通过function将d1传入,void function(Dog dog); d1是dog的实参,在调用function的过程中产生了一个拷贝构造的调用,相当于Dog dog = Dog(d1);
  • 作为返回值产生的拷贝构造函数的调用,例如有函数:

    Dog function(Dog dog){  //传入时的调用

     Dog tmp;

     return tmp;  // 返回时的调用

    }

    在main函数中调用该函数返回一个Dog值:

    Dog d1;

    Dog dog = function(d1);

    这个调用过程中,产生了一个拷贝函数的调用function中 return d;不是返回的d,而是通过拷贝函数,将d的值赋值给了一个临时的Dog类对象,让后将这个临时对象的值赋给dog,但是本人在实际运行时发现,这个过程 城中,临时变量并没有调用构造和析构函数,经过查询相关资料,这是C++17对返回方式的优化,若将函数内的局部变量作为返回值,编译器不再进行拷贝构造生成临时变量,这样减少了副本,提高了程序运行的效率,但具体是返回的这里的 tmp 还是其他操作还没有进行研究

posted @ 2023-02-24 15:51  Meetalone  阅读(17)  评论(0编辑  收藏  举报