Dou*_* T. 9

在函数内部时,

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没有默认构造函数,则不会编译此代码.默认构造函数由您定义或由编译器隐式提供.有关默认构造函数的更多信息,请参见此