Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;复制构造函数相关查询 #包括 甲级{ 公众: INTA; }; int main(){ obj; 目标a=5; A b(obj); b、 a=6; std::cout_C++_Algorithm_Copy Constructor_Default Copy Constructor - Fatal编程技术网

C++ c++;复制构造函数相关查询 #包括 甲级{ 公众: INTA; }; int main(){ obj; 目标a=5; A b(obj); b、 a=6; std::cout

C++ c++;复制构造函数相关查询 #包括 甲级{ 公众: INTA; }; int main(){ obj; 目标a=5; A b(obj); b、 a=6; std::cout,c++,algorithm,copy-constructor,default-copy-constructor,C++,Algorithm,Copy Constructor,Default Copy Constructor,是的,默认的复制构造函数是浅层复制。请参阅详细信息 但是,b与a是完全不相交的,因此这两件事没有直接的关系。b是与obj完全分离的对象。它有自己的a独立于obj 听起来你想的是一个参考: A& b = obj; 在此之后,b和obj都指向同一个对象。通过b所做的更改将通过obj可见,反之亦然。ab(obj)将obj信息复制到新创建的对象b。是的,它是一个浅拷贝,因此b实际上无法控制分配给它的内容。您可能想的是一个参考: A& b = obj; A&b=obj; b、 a=6;

是的,默认的复制构造函数是浅层复制。请参阅详细信息


但是,b与a是完全不相交的,因此这两件事没有直接的关系。

b
是与
obj
完全分离的对象。它有自己的
a
独立于
obj

听起来你想的是一个参考:

A& b = obj;
在此之后,
b
obj
都指向同一个对象。通过
b
所做的更改将通过
obj
可见,反之亦然。

ab(obj)
obj
信息复制到新创建的对象
b
。是的,它是一个浅拷贝,因此
b
实际上无法控制分配给它的内容。您可能想的是一个参考:

A& b = obj;
A&b=obj;
b、 a=6;
标准::cout
浅拷贝意味着参考??还是我遗漏了什么

您缺少了一些内容。浅复制意味着复制。它将对象的所有成员从一个复制到另一个。它不是引用。创建的副本完全独立于原始副本

有关浅拷贝和深拷贝之间的区别,请参见

浅拷贝意味着参考??还是我遗漏了什么

是的,你错过了什么

浅层复制并不意味着引用。浅层复制意味着复制成员:如果成员是指针,则它复制地址,而不是指针指向的内容。这意味着,原始对象中的指针和所谓的复制对象指向内存中的相同内容。另一方面,这称为浅层复制。深度复制另一方面,它不复制地址,而是创建一个新指针(在新对象中),为其分配内存,然后复制原始指针指向的内容


在您的情况下,浅复制和深复制没有区别,因为类中没有指针成员。每个成员都被复制(像往常一样),因为没有成员是指针,所以每个复制的成员在内存中都是不同的成员。也就是说,原始对象和复制的对象在内存中是完全不同的对象。这两个对象之间绝对没有共享的内容。因此,当您修改一个对象时,它根本不会更改另一个对象中的任何内容。

一个副本,为什么它会被称为一个副本构造函数?请注意,浅层和深层是有点不相关的,因为在您的示例中没有深度复制。为什么您认为
obj.a
会改变,除非您显式地改变
obj
的状态?我想编译器会将obj的引用返回到a,也就是ythis@Peter:否复制constructor,顾名思义,返回它作为参数接收的对象的副本。好的,但是在java中,当我们在函数中传递对象时,复制构造函数也被调用,那么y是通过引用的,那么java的复制构造函数默认返回引用了吗,单词copy没有意义吗?我认为默认的copy construtor将返回b中对象的引用obj@Peter:不,不是。这两个对象是完全分开的。那么,如果浅拷贝正在生成一个copy@Peter,如果你有一个指针,它将复制指针,而不是它所指向的。复制它所指向的必须显式完成。这是一个深度复制。好的,那么在java中,当我们在函数中传递对象时,复制构造函数也会被调用,那么y是通过引用,java的复制构造函数默认返回引用,复制这个词没有意义吗there@Peter在java中,它们是通过值传递的,而不是通过复制构造函数传递的新副本,但区别在于它必须被显式调用。@Peter Reference您认为它是一个Java术语。最接近的是C中的指针。但这与这个问题无关。Java copy构造函数在函数中传递对象时返回对原始副本的引用,而不是对原始副本的引用,所以是在Java中s,复制构造函数被调用,然后也是对的,那么y是通过引用的,那么java的复制构造函数默认返回引用了吗,单词copy没有意义吗there@Peter我不懂java,C++不是java。
A& b = obj;

b.a = 6;

std::cout << obj.a; // 6