'new'关键字在c ++中做了什么?

可能重复:
何时使用“新”,何时不使用C ++?
我应该什么时候在C ++中使用新的关键字?

A a;什么区别A a;A a = new A();

编辑

A* a = new A();

我的错。


当在一个函数内部时,

A a

在栈上声明一个变量并在a上调用A的默认构造函数*。 该变量在变量超出范围时自动清除。

A a = new A(); 

但是,不会编译

A* a = new A(); 

在堆上创建一个新的A,并在新分配的内存上调用A的默认构造函数*。 然后,表达式依次计算出一个指向新变量A的指针,变量a被初始化为。 您负责管理此内存,因此您需要确保稍后使用删除操作将其删除:

delete a;

否则你会有内存泄漏

看到这个问题,了解更多关于堆栈和堆之间的区别。

*如果A没有默认构造函数,则这些代码都不会编译。 默认构造函数由您定义或由编译器隐式提供。 关于默认构造函数,请参阅这里。


Doug T:

一个a在栈上声明一个变量。

不正确: A a声明一个变量并为其分配内存,无论是在堆栈还是在全局内存空间中,取决于它的范围。

考虑内存中的位置

static A a

位于(全局内存空间 - 不是堆栈,不是堆)。


第二个是无效的。 新分配空间并返回一个指针。 使用A * a = new A();

链接地址: http://www.djcxy.com/p/96527.html

上一篇: What does the 'new' keyword do in c++?

下一篇: Why do I need to call new?