在C#中,看下面一段程序:
class A
{
public int value;
public A(int x)
{
value = x;
}
public void set(int x)
{
value = x;
}
}
如果有:A a1 = new A(1);
A a2 = a1;
a2.set(2);
Console.WriteLine(a1.value);
Console.WriteLine(a2.value);
那么会发现a1.value和a2.value都是2。----------------》C#中对象赋值是引用传递,没有创建新的对象。普通基本类型赋值是值传递,除非加了ref和out,那就是引用传递。
在C++中,看下面一段程序:
class A{
public:
A(int x){
value = x;
}
int value;
void set(int x){
value = x;
}
};
如果有:A* a1 = new A(1);
A a2=*a1;
a1->set(2);
cout<<a1->value<<endl;
cout<<a2.value<<endl;
那么会发现a1的value是2,a2的value是1。---------------------》C++中对象赋值是值传递,它们是两个不同 的对象。
并且,在上面程序中,a1值是地址,存放在栈中,指向存放在堆中的A类对象;*a1就是存放在堆中的对象,在A a2=*a1;后,a2对象作为临时变量,存放在栈中。-----------》C++对象赋值后,被赋值的对象作为临时变量,存放在栈中。