提问者:小点点

与浅复制构造函数和深复制构造函数混淆“重复”


我在学习C++,我在实验不同的场景,所以我想做一个简单的类复制,这就是我想出来的-

#include <iostream>

class not_dynamic
{
private:
    int data;
public:
    not_dynamic(int temp_data = 200)                            //constructor
        :data(temp_data)
    {
        std::cout << "constructor initialized" << std::endl;
    }

    not_dynamic(const not_dynamic& source)
        :data(source.data)
    {
        std::cout << "copy constructor initialized" << std::endl;
    }
    void get_info()
    {
        std::cout << data << " " <<  &data << std::endl;
    }
};

int main()
{
    not_dynamic v{ 100 };
    v.get_info();
    not_dynamic jackie{ v };
    jackie.get_info();


}


为此,我得到以下结果-

constructor initialized
100 00EFFBD4                    // 100 is the value in data and 00EFFBD4 is address of data
copy constructor initialized
100 00EFFBC8                    // same as above

但是正如我在浅层复制中所回忆的,不同对象的所有相同实例(两个对象都是相同的)应该具有相同的内存地址,但是在本例中它是相同的。

我真的很困惑。你们能帮我吗??

谢谢


共1个答案

匿名用户

这两个对象仍然是不同的,不同的,它们各自的成员变量实例存储在不同的位置。

您对浅层副本所做的工作基本上相当于:

int a = 10;
int b = a;   // Shallow copy of a

两个变量ab仍然是两个不同的变量,尽管a的值已经复制到b中。 它是被复制的值。