【问题标题】:Copying Objects(Without Heap)复制对象(无堆)
【发布时间】:2021-07-19 00:58:44
【问题描述】:

考虑下面这段代码

class A{
  public:
     int val;
     a(); 
}
int main(){
     A obj1;
     A obj2=obj1;
}

在这种情况下,不涉及指针或堆。这个 A obj2=obj1 是浅拷贝还是深拷贝? 当我在 obj1 和 obj2 上使用 addressof() 函数时,我得到不同的值。

【问题讨论】:

标签: c++ oop copy-constructor deep-copy shallow-copy


【解决方案1】:

这里实际上不存在浅拷贝,因为复制A 类型的对象总是会复制val

但是有了这样的类:

class B
{
    char *s;
};

您可以进行浅拷贝或深拷贝,具体取决于您是仅复制指针s(浅),还是复制s 指向的内容(深)。在深拷贝的情况下,s 的值在拷贝中当然是不同的,因为它最终指向与原始不同的内存块。

【讨论】:

  • 感谢您的回答!那么我们可以调用A obj2=obj1深拷贝吗?
  • 实际上,虽然当你复制一个只包含原始数据类型的对象时,你所能做的就是复制整个对象(除非你编写了某种奇怪的复制构造函数),所以真的没有区别。不过要小心。 B obj2 = obj1 将是一个浅拷贝,除非您编写一个拷贝构造函数,将 s 指向的内容拷贝到新分配的存储中。
猜你喜欢
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 2015-05-20
  • 2018-02-23
  • 2014-12-26
  • 2016-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多