用new来给一个类的对象分配空间,和使用类名称来定义一个类的对象,有什么区别?难道区别只是new的返回值是个指针,而对象定义得到的是变量名么?或者是在存储空间上不同?有什么不同呢?具体什么时候使用哪个方法呢?
偶义正言辞滴说:分数就是用来给的!
----------------------------------------------------------------------
对,存储空间上不同。
new出来的在堆上
直接定义的在栈上
--------------------------------------------------------
同意楼上的
具体什么时候使用哪个方法呢?:
当变量个数较少且数量确定时可以直接定义
当数量较多或变量个数不能确定时用new
--------------------------------------------------------
哦,看了这个我又多知道了一个东东哦!!谢谢拉!!
希望知道怎么用,期待中......
--------------------------------------------------------
用法似乎高手都喜欢用new,因为堆的内存大嘛,我喜欢用栈,方便点,不用指来指去,还要回收内存.栈在递归可能会遇到溢出,因为内存有限制.而且new出来的可以用很多动态重载的特性.
--------------------------------------------------------
栈上分配的在函数结束后会自己释放,堆上的要自己手工释放。
--------------------------------------------------------
举个例子:
如果你有一个对话框类CMyDlg;
你这样用:CMyDlg dlg;
dlg.Create();
建一非模式对话框,函数一结束,dlg被收回了,这个对话框一闪而过。
这样用: CMyDlg *dlg=new CMyDlg;
dlg->Create();
函数结束了,dlg还在。这个非模式对话框还在。
--------------------------------------------------------
一个在堆,一个在栈
栈就是CXXX XX这种的,是在程序运行前就分配好的,不需自已释放
而堆,是运行时分配的,得自已释放
还有就是对话框它们效果明显,一个无模式,一个有模式,做个例子就很清楚了!
--------------------------------------------------------
东西都被楼上的说完了
--------------------------------------------------------
用法似乎高手都喜欢用new,因为堆的内存大嘛,我喜欢用栈,方便点,不用指来指去,还要回收内存.栈在递归可能会遇到溢出,因为内存有限制.而且new出来的可以用很多动态重载的特性.
==========================================================
这个跟高手不高手没关系,而是要考虑实际情况
如果对象本身很小,或者没有特殊的必要,还是要放在栈上,这样有2个好处:
1 效率高
2 在堆上创建对象容易引起内存碎片
--------------------------------------------------------
赫赫,因为我看自己的程序基本都是在栈上分配,而看别的高手写的代码一用到变量就new,所以如此感叹.
--------------------------------------------------------
//
偶义正言辞滴说:分数就是用来给的!
----------------------------------------------------------------------
对,存储空间上不同。
new出来的在堆上
直接定义的在栈上
--------------------------------------------------------
同意楼上的
具体什么时候使用哪个方法呢?:
当变量个数较少且数量确定时可以直接定义
当数量较多或变量个数不能确定时用new
--------------------------------------------------------
哦,看了这个我又多知道了一个东东哦!!谢谢拉!!
希望知道怎么用,期待中......
--------------------------------------------------------
用法似乎高手都喜欢用new,因为堆的内存大嘛,我喜欢用栈,方便点,不用指来指去,还要回收内存.栈在递归可能会遇到溢出,因为内存有限制.而且new出来的可以用很多动态重载的特性.
--------------------------------------------------------
栈上分配的在函数结束后会自己释放,堆上的要自己手工释放。
--------------------------------------------------------
举个例子:
如果你有一个对话框类CMyDlg;
你这样用:CMyDlg dlg;
dlg.Create();
建一非模式对话框,函数一结束,dlg被收回了,这个对话框一闪而过。
这样用: CMyDlg *dlg=new CMyDlg;
dlg->Create();
函数结束了,dlg还在。这个非模式对话框还在。
--------------------------------------------------------
一个在堆,一个在栈
栈就是CXXX XX这种的,是在程序运行前就分配好的,不需自已释放
而堆,是运行时分配的,得自已释放
还有就是对话框它们效果明显,一个无模式,一个有模式,做个例子就很清楚了!
--------------------------------------------------------
东西都被楼上的说完了
--------------------------------------------------------
用法似乎高手都喜欢用new,因为堆的内存大嘛,我喜欢用栈,方便点,不用指来指去,还要回收内存.栈在递归可能会遇到溢出,因为内存有限制.而且new出来的可以用很多动态重载的特性.
==========================================================
这个跟高手不高手没关系,而是要考虑实际情况
如果对象本身很小,或者没有特殊的必要,还是要放在栈上,这样有2个好处:
1 效率高
2 在堆上创建对象容易引起内存碎片
--------------------------------------------------------
赫赫,因为我看自己的程序基本都是在栈上分配,而看别的高手写的代码一用到变量就new,所以如此感叹.
--------------------------------------------------------
//