#include <iostream>
using namespace std;
class Person {
public:
int* myInt;
};
int main() {
Person p1;
p1.myInt = new int(10);
Person p2 = p1; //这句代码相当于在栈上新建了一个p2对象,采用默认的拷贝构造函数,属于浅拷贝。
cout << "p1.myInt地址:" << p1.myInt << " p1.myInt的值:" << *p1.myInt << endl;
delete p1.myInt;
p1.myInt = NULL;
//此时p2.myInt不为NULL,但是p2.myInt指向的内存已经被释放了。
//(注意指针指向的内存已经被释放不代表指针会自动置为NULL)
cout << "p2.myInt地址:" << p2.myInt << " p2.myInt的值:" << *p2.myInt << endl;
//delete p2.m_height; 若p2再次释放会报错,双重释放
system("pause");
return 0;
}
//输出
//p1.myInt地址:0000024506977A10 p1.myInt的值:10
//p2.myInt地址:0000024506977A10 p2.myInt的值: -572662307
public class Person
{
public object myInt;
public static void Main()
{
Person p1 = new Person();
p1.myInt = 10;
Person p2 = p1; //与C++中不同,这句代码相当于在栈上新建了一个引用p2,p2和p1都指向堆中的同一个Person对象,这不属于拷贝。
Person p3 = new Person();//这句代码,相当于在堆中新建一个Person对象,栈上新建一个引用p3指向该对象。
p3.myInt = p1.myInt;//将p3.myInt指向p1.myInt所指向的内存,类似C++的浅拷贝。
p1.myInt = null;
Console.WriteLine(p1.myInt);
Console.WriteLine(p2.myInt);
Console.WriteLine(p3.myInt);
}
}
//输出
//空行(null)
//空行(null)
//10