可能重复:
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();
我的错误。
答案 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)
a a在堆栈上声明一个变量。
不正确:A a
声明一个变量并为其分配内存,无论是在堆栈上还是在全局内存空间中,具体取决于它具有的范围。
还要考虑内存中的位置
static A a
找到(全局内存空间 - 不是堆栈,不是堆)。
答案 2 :(得分:0)
第二个无效。 new分配空间并返回指针。使用A * a = new A();