编程中的深拷贝与浅拷贝
浅拷贝涉及创建一个引用与原始数据相同的基础数据的新对象。相反,深度复制会构造一个新对象,其中包含与原始数据关联的所有数据的独立副本。
考虑以下 C 类:
<code class="c++">class X { public: int i; int *pi; X() : pi(new int) {} X(const X& copy) : i(copy.i), pi(copy.pi) {} };</code>
在这种情况下,将导致浅复制在分配 pi 时,在指向同一 int 对象的原始 X 对象和复制的 X 对象中:
<code class="c++">X original; X copy(original);</code>
另一方面,深度复制包括复制构造函数中的一个步骤,其中分配新的 int 对象:
<code class="c++">class X { public: int i; int *pi; X() : pi(new int) {} X(const X& copy) : i(copy.i), pi(new int(*copy.pi)) {} };</code>
因此,复制的 X 对象将拥有自己的 int 对象,其值与原始对象相同。
最初,默认的复制构造函数被认为始终执行浅复制。然而,已经澄清的是,该行为取决于每个成员的类型。该标准指定了成员复制,这意味着标量类型(如本例中的 int)是使用内置赋值运算符进行复制的。
因此,深复制和浅复制的选择取决于应用程序的具体要求以及正在复制的数据的特征。
以上是深拷贝与浅拷贝:什么时候应该选择哪个?的详细内容。更多信息请关注PHP中文网其他相关文章!