我知道在三个实例上调用了复制构造函数
- 当实例化一个对象并使用另一个对象的值对其进行初始化时。
- 按值传递对象时。
3. 当一个对象按值从函数中返回时。
如果在返回对象值时调用复制构造函数,我对 no.3 有疑问,如果在函数中本地声明对象,它是否会产生问题。
我的意思是复制构造函数是一个深拷贝,并将对象的引用作为参数
我知道在三个实例上调用了复制构造函数
3. 当一个对象按值从函数中返回时。
如果在返回对象值时调用复制构造函数,我对 no.3 有疑问,如果在函数中本地声明对象,它是否会产生问题。
我的意思是复制构造函数是一个深拷贝,并将对象的引用作为参数
正是为了避免问题而调用它。作为结果的新对象从本地定义的对象中初始化,然后本地定义的对象被销毁。
在深拷贝用户定义的构造函数的情况下,它都是一样的。首先为将作为结果的对象分配存储空间,然后调用复制构造函数。它使用传递的引用来访问本地定义的对象并将所需的内容复制到新对象。
复制在被调用函数退出之前完成,并将当时存在的局部变量复制到返回值中。
被调用的函数可以访问返回值将占用的内存,即使在复制时该内存不在“范围内”,它仍然可用。
根据对我的问题的回答,复制构造函数甚至可能被调用两次:一次将本地对象复制到返回“对象”上,一次将返回对象复制到分配给它的变量上。
不过,大可不必!编译器可以优化这两种复制结构。
不,它会在当地人被摧毁之前调用它。您可以使用记录破坏和复制构造的对象或查看生成的汇编代码来测试它。
调用复制构造函数的一般情况有以下三种: