从函数返回对象时,是否调用C++中的复制构造函数?

Kaz*_*oom 25 c++ constructor copy-constructor

我理解在三个实例上调用复制构造函数

  1. 实例化一个对象并使用另一个对象的值初始化它时.
  2. 按值传递对象时.

3.按值从函数返回对象时.

我有问题,如果在返回对象值时调用了复制构造函数,如果在函数中本地声明了对象,则不应该产生问题.

我的意思是复制构造函数是一个深拷贝,并将对象的引用作为参数

sha*_*oth 17

它被称为完全避免问题.作为结果的新对象从本地定义的对象初始化,然后销毁本地定义的对象.

在深度复制用户定义的构造函数的情况下,它们都是相同的.为将作为结果的对象分配第一个存储,然后调用复制构造函数.它使用传递的引用来访问本地定义的对象,并复制新对象所需的内容.


unw*_*ind 12

复制在被调用函数退出之前完成,并将当时存在的局部变量复制到返回值中.

被调用的函数可以访问返回值占用的内存,即使该内存在复制过程中不在"范围内",它仍然可用.


xto*_*ofl 5

根据我的问题的答案,复制构造函数甚至可以被调用两次:一次将本地对象复制到返回'对象'上,一次将返回对象复制到它分配给它的变量上.

但是,它不一定是!编译器可以优化两种复制结构.

  • 恕我不能赞同.复制construtor仅在返回对象上调用一次,当将返回的对象分配给另一个外部范围对象时,调用赋值运算符,而不是复制构造函数. (2认同)