关于内存管理:’new’关键字在c ++中有什么作用?

What does the 'new' keyword do in c++?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicates:
When to use “new” and when not to, in C++?
When should I use the new keyword in C++?

A a;A a = new A();之间有什么区别?

编辑:

1
A* a = new A();

我的错。


在函数内部时,

1
A a

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

1
A a = new A();

但是,不会编译

1
A* a = new A();

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

1
delete a;

否则你会有内存泄漏

请参阅此问题以了解有关堆栈和堆之间差异的更多信息。

*如果A没有默认构造函数,则不会编译此代码。默认构造函数由您定义或由编译器隐式提供。有关默认构造函数的更多信息,请参见此


道格T:

A a declares a variable on the stack.

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

还要考虑内存中的位置

1
static A a

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


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