'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