【发布时间】:2018-09-11 10:13:55
【问题描述】:
我想知道 C++ 什么时候做深拷贝,什么时候做浅拷贝。
例如:
int find()
{
int n=5;
return n;
}
为了在移出函数后删除n,它必须创建一个临时变量n,并将其返回给调用者。结果就是浅拷贝,对吗?
【问题讨论】:
-
对于单个标量值,你觉得浅拷贝和深拷贝有什么区别?它怎么会变得更深?还要注意,当涉及到函数本地时,“删除”,普通的旧数据类型不是一个非常有用的概念;通常什么都不会“删除”,它只是在堆栈展开时留在周围,并且内存可能会在以后的一些函数调用中重用,而没有以任何有意义的方式清理。
-
“浅问题”发生在指针上;该地址被复制,但该地址处的内存内容未被复制。你必须手动复制它!
-
每个副本都是“浅层的”,除非你做一些额外的事情,也就是说只有值被复制,而不是任何可能与之相关的东西。例如,将指针复制到数组的第一个元素不会复制数组。对于您的
int,浅拷贝和深拷贝绝对没有区别 -
我从未听说过有一种语言可以自己进行深度复制。
-
@molbdnilo 我真的很想用一个反例来震撼你,让你眼花缭乱,但我被难住了!
标签: c++