Foo类{ 对象(&O); };
-
2 默认情况下,编译器执行浅层复制。 如果你不知道浅拷贝和深拷贝之间的区别,那将是首先要问的问题。 这也有助于回答为什么我们需要复制构造函数。 – 瑞典语 评论 2020年8月12日15:08 -
当它在运行时编译并崩溃时,情况会更糟。 有了编译器错误,您就知道有问题了。 如果出现运行时错误,你最好祈祷在机组人员发现之前找到它。 – 用户4581301 评论 2020年8月12日15:17 -
@瑞典语浅显的复制点在引用时是没有意义的。 – 谢尔盖A 评论 2020年8月12日15:19 -
1 假设引用被初始化为指向类的另一个成员。 当复制的实例时,编译器生成的复制构造函数将 富 ,使副本中的引用引用原始对象的成员,而不是它自己的相应成员。 如果这不是期望的行为,则需要手动复制构造函数。 – 彼得 评论 2020年8月12日15:20 -
1 还要记住,不能重新分配引用。 – 用户4581301 评论 2020年8月12日15:21
1答案
…我过去曾被Algol68中r1=r2的引用所咬过 可以通过r1赋值给引用的对象,也可以分配一个新的 r1的参考值(重新绑定r1)取决于r2的类型。 我 希望在C++中避免此类问题。
-
是 啊。 我想我只是想“到2020年了,为什么现在它应该知道我想要什么了,我们还必须手动键入……”比如,不是吗? 设计者难道不知道我们都确切地知道复制ctor和=运算符想要做什么吗? 我们都知道!! 所以为我们做吧! 这让我感到焦虑,因为其他人或我自己最终会忘记复制班上的新成员!!! 人们在修改代码时根本不会阅读你的代码。。 评论 2020年8月12日15:39 -
1 -
我不知道! 哈哈。 它应该知道。 我知道这很酷,我们可以把内存管理到地址级别。 但是如果我们可以只写一些代码,做我们想做的,而不是用模糊的方式取悦编译器或语言,那会怎么样呢。 但我梦想。。 评论 2020年8月12日15:54 -