C++物件賦值與C#物件賦值----C++與C#值傳遞與引用傳遞淺析
在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++物件賦值後,被賦值的物件作為臨時變數,存放在棧中。