我知道调用复制构造函数的一种方法是将对象用作调用函数的参数。
例如
class A
{];
A object;
function(object);//here i have called a function with the class A's object.
如果函数的声明是,则
void function(A &obj1);//here the function actually takes the object into a reference.
现在会调用复制构造函数吗?
答案 0 :(得分:3)
不,它不会,因为您正在传递对现有对象的引用。您没有像上一个示例那样复制对象。
语句“调用复制构造函数的一种方法是将对象用作调用函数的参数”,这是一种误导。未调用复制构造函数,因为该对象用作参数。仅当对象通过值传递给函数时才会调用它,在这种情况下,对象的副本在另一个内存位置生成,函数将此新副本视为其参数。
如果参数通过引用(void function(A &obj1)
)传递,那么会发生的情况是编译器提供对被调用函数的同一对象的访问。这是通过让函数知道对象已经存在的存储器位置来完成的。没有复制。
详细了解参考参数here。
答案 1 :(得分:1)
在这种情况下,没有。传递引用与传递指针相同,因此复制的唯一内容是obj1的内存地址。