1. 程式人生 > >C++物件賦值與C#物件賦值----C++與C#值傳遞與引用傳遞淺析

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++物件賦值後,被賦值的物件作為臨時變數,存放在棧中。