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

Using new operator to statically allocate an object

本文关键字:分配 对象 静态 运算符 new 使用      更新时间:2023-10-16

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

CClass clss = *new CClass();

与上述相反,下一个确实编译,但给出了断言错误。

delete &clss;

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

如果你分解它:

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

CClass clss -> 静态分配变量

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

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

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

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

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

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