C++用new来创建对象和非new来创建对象的区别

 我来答
de...9@163.com
2017-10-24 · 超过26用户采纳过TA的回答
知道答主
回答量:69
采纳率:33%
帮助的人:41.7万
展开全部
C++用new来创建对象和非new来创建对象的区别 我们都知道C++中有三种创建对象的方法,如下:
#include <iostream> using namespace std;
class A {
private: int n; public:
A(int m):n(m) { }
~A(){} };
int main() {
A a(1); //栈中分配 A b = A(1); //栈中分配
A* c = new A(1); //堆中分配 delete c; return 0; }

第一种和第二种没什么区别,一个隐式调用,一个显式调用,两者都是在进程虚拟地址空间中的栈中分配内存,而第三种使用了new,在堆中分配了内存,而栈中内存的分配和释放是由系统管理,而堆中内存的分配和释放必须由程序员手动释放,所以这就产生一个问题是把对象放在栈中还是放在堆中的问题,这个问题又和堆和栈本身的区别有关: 这里面有几个问题:
1.堆和栈最大可分配的内存的大小 2.堆和栈的内存管理方式 3.堆和栈的分配效率
首先针对第一个问题,一般来说对于一个进程栈的大小远远小于堆的大小,在linux中,你可以使用ulimit -s (单位kb)来查看一个进程栈的最大可分配大小,一般来说不超过8M,有的甚至不超过2M,不过这个可以设置,而对于堆你会发现,针对一个进程堆的最大可分配的大小在G的数量级上,不同系统可能不一样,比如32位系统最大不超过2G,而64为系统最大不超过4G,所以当你需要一个分配的大小的内存时,请用new,即用堆。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式