复制对象(无堆)

Copying Objects(Without Heap)

提问人:Bill Indie 提问时间:7/19/2021 最后编辑:wallykBill Indie 更新时间:7/19/2021 访问量:142

问:

请考虑以下代码

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

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

C++ OOP 复制构造函数 deep-copy 浅拷贝

评论

0赞 prehistoricpenguin 7/19/2021
这回答了你的问题吗?深拷贝和浅拷贝有什么区别?

答:

2赞 Paul Sanders 7/19/2021 #1

这里实际上没有浅拷贝这样的东西,因为复制一个类型的对象总是会复制。Aval

但是对于这样的类:

class B
{
    char *s;
};

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

评论

0赞 Bill Indie 7/19/2021
感谢您的回答!那么我们可以称 A obj2=obj1 深度拷贝吗?
0赞 Paul Sanders 7/20/2021
实际上,尽管当你复制一个只包含原始数据类型的对象时,你所能做的就是复制整个对象(除非你编写了某种时髦的复制构造函数来做一些奇怪的事情),所以真的没有区别。但要小心。 将是浅拷贝,除非您编写一个复制构造函数,将指向的内容复制到新分配的存储中。B obj2 = obj1s