与浅拷贝构造函数和深拷贝构造函数混淆



我正在学习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

但是正如我在浅拷贝中回忆的那样,不同对象的所有相同实例(两个对象相同(应该具有相同的内存地址,但在这种情况下它是相同的。

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

谢谢

这两个对象仍然不同且不同,并且将具有自己的成员变量实例,每个实例存储在不同的位置。

你对浅拷贝所做的事情基本上等同于:

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

两个变量ab仍然是两个不同的变量,即使a的值已复制到b中。这是复制的值。

最新更新