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

时间:2015-01-02 12:12:13

标签: c++ stack heap new-operator delete-operator

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

CClass clss = *new CClass();

与上面相反,接下来会编译但会产生断言错误。

delete &clss;

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

2 个答案:

答案 0 :(得分:2)

如果你将其分解:

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

CClass clss - >静态分配的变量

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

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

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

答案 1 :(得分:1)

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

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

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