深拷贝与浅拷贝
问题:
两者之间的主要区别是什么深拷贝和浅拷贝?
答案:
浅拷贝:
示例:
<code class="c++">class X { private: int i; int *pi; public: X() : pi(new int) {} X(const X& copy) : i(copy.i), pi(copy.pi) {} };</code>
在此浅复制中, pi 在原始对象和复制对象中引用相同的 int 对象。
深度复制:
示例:
<code class="c++">class X { private: int i; int *pi; public: X() : pi(new int) {} X(const X& copy) : i(copy.i), pi(new int(*copy.pi)) {} };</code>
在此深度复制中,pi 指向一个新的 int 对象,其值与原始对象相同。
复制构造函数类型:
默认的复制构造函数取决于每个成员的复制构造函数的行为:
示例:
In在下面的示例中,默认的复制构造函数由于其实现而为 std::vector 成员创建了一个深层副本:
<code class="c++">class Y { private: std::vector<int> v; public: Y() {} Y(const Y& copy) : v(copy.v) {} };</code>
在这种情况下,std::vector 的复制构造函数为其创建了一个深层副本内容。
以上是深复制与浅复制:何时需要数据的真实副本?的详细内容。更多信息请关注PHP中文网其他相关文章!