使用 new 运算符静态分配对象

Using new operator to statically allocate an object

虽然对编译器有效,但下一个当然不应该做。但是当你这样做时会发生什么?

CClass clss = *new CClass();

与上面相反,next确实编译但是给出断言错误。

delete &clss;

这是否与在堆栈或堆上分配内存有关?

如果你分解它:

new CClass() -> 动态分配的实例指针

CClass clss -> 静态分配的变量

CClass clss = *new CClass(); -> 将临时指向的值复制到 clss

&clss -> 静态分配变量的地址

delete &clss; -> 删除静态分配的变量(没有意义)

第一行代码是正确的,您用另一个动态分配的实例初始化静态分配的 CClass 实例。

第二个显然是错误的,因为您试图删除一个尚未动态分配的对象。

第一行产生内存泄漏,因为你动态分配了一堆内存,但从不保留它的地址,所以它永远不能被释放(删除)。