我理解在三个实例上调用复制构造函数
第3。按值从函数返回对象时。
我对3号有疑问 如果在返回对象值时调用了复制构造函数,那么如果在函数中本地声明了对象,则不应该产生问题。
我的意思是复制构造函数是一个深拷贝,并将对象的引用作为参数
答案 0 :(得分:17)
它被称为完全避免问题。作为结果的新对象从本地定义的对象初始化,然后本地定义的对象被销毁。
如果是深度复制用户定义的构造函数,它们都是一样的。为将作为结果的对象分配第一个存储,然后调用复制构造函数。它使用传递的引用来访问本地定义的对象,并复制新对象所需的内容。
答案 1 :(得分:12)
复制在被调用函数退出之前完成,并将当时存在的局部变量复制到返回值中。
被调用的函数可以访问返回值占用的内存,即使该内存在复制时不在“范围内”,它仍然可用。
答案 2 :(得分:5)
根据an answer我的问题,复制构造函数可能被称为甚至两次:一次将本地对象复制到返回'对象',一次复制返回对象在它被分配给的变量上。
然而,它不需要!编译器可以优化两种复制结构。
答案 3 :(得分:0)
不,它在本地人被摧毁之前调用它。您可以使用记录销毁和复制构造的对象,或通过查看生成的汇编代码来测试它。
答案 4 :(得分:-1)
有三种常见情况需要调用复制构造函数: