C++对象赋值与C#对象赋值----C++与C#值传递与引用传递浅析
2016-04-27 21:13
369 查看
在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++对象赋值后,被赋值的对象作为临时变量,存放在栈中。
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++对象赋值后,被赋值的对象作为临时变量,存放在栈中。
相关文章推荐
- new -开始C++
- 关于C++类中的三兄弟(pretect、private、public)
- C++构造函数与析构函数
- C++俄罗斯方块方向键
- C++使用throw抛出异常
- C/C++中各种类型int、long、double、char表示范围(最大最小值)
- C++用new来创建对象和非new来创建对象的区别
- 1015. Reversible Primes (20)
- 《Effective C++》 笔记
- c++ 带有初始化成员列表的类构造函数 定义与实现分离 方法
- C++类型修饰符
- C++基础
- C++面向对象
- 在C++中将一个GUID变量转换成为string变量
- IO库总结——C++Primer第八章
- 第四次C++上机实验
- Wiki上的C++哲学
- c++的bind()函数
- C++之时间统计
- c++解释--百度百科