'new'关键字在c ++中的作用是什么?

时间:2011-05-02 21:25:44

标签: c++ memory-management syntax

  

可能重复:
  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();之间的区别是什么?

被修改

A* a = new A();

我的错误。

3 个答案:

答案 0 :(得分:9)

在函数内部时,

A a

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

A a = new A(); 

不会编译,但是

A* a = new A(); 

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

delete a;

否则您将拥有memory leak

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

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

答案 1 :(得分:1)

道格T:

  

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

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

还要考虑内存中的位置

static A a
找到

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

答案 2 :(得分:0)

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