Don*_*Lun 2 c++ syntax memory-management
A a;和之间有什么区别A a = new A();?
编辑:
A* a = new A();
Run Code Online (Sandbox Code Playgroud)
我的错.
在函数内部时,
A a
Run Code Online (Sandbox Code Playgroud)
在堆栈上声明一个变量,并在a上调用A的默认构造函数*.当变量超出范围时,将自动清除此变量.
A a = new A();
Run Code Online (Sandbox Code Playgroud)
但是,不会编译
A* a = new A();
Run Code Online (Sandbox Code Playgroud)
在堆上创建一个新的A,并在新分配的内存上调用A的默认构造函数*.然后表达式依次求值为指向新A的指针,变量a初始化为.您负责管理此内存,因此您需要确保稍后使用delete删除它:
delete a;
Run Code Online (Sandbox Code Playgroud)
否则你会有内存泄漏
请参阅此问题以了解有关堆栈和堆之间差异的更多信息.
*如果A没有默认构造函数,则不会编译此代码.默认构造函数由您定义或由编译器隐式提供.有关默认构造函数的更多信息,请参见此
| 归档时间: |
|
| 查看次数: |
271 次 |
| 最近记录: |