使用 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
实例。
第二个显然是错误的,因为您试图删除一个尚未动态分配的对象。
第一行产生内存泄漏,因为你动态分配了一堆内存,但从不保留它的地址,所以它永远不能被释放(删除)。
虽然对编译器有效,但下一个当然不应该做。但是当你这样做时会发生什么?
CClass clss = *new CClass();
与上面相反,next确实编译但是给出断言错误。
delete &clss;
这是否与在堆栈或堆上分配内存有关?
如果你分解它:
new CClass()
-> 动态分配的实例指针
CClass clss
-> 静态分配的变量
CClass clss = *new CClass();
-> 将临时指向的值复制到 clss
&clss
-> 静态分配变量的地址
delete &clss;
-> 删除静态分配的变量(没有意义)
第一行代码是正确的,您用另一个动态分配的实例初始化静态分配的 CClass
实例。
第二个显然是错误的,因为您试图删除一个尚未动态分配的对象。
第一行产生内存泄漏,因为你动态分配了一堆内存,但从不保留它的地址,所以它永远不能被释放(删除)。