asa*_*app 0 c++ memory-management
new/delete 关键字是使用免费商店
malloc/free 关键字是使用堆
我看到写在某处new使用malloc.怎么会这样?它们不用于内存段?
第二,我看到写在某个地方free后我们不能使用new或delete之后使用malloc.但如果new使用malloc为什么free不起作用?
我们free在newect 之后使用的地方'.这是错误还是未定义的行为?
谢谢
new/delete关键字是使用免费存储
malloc/free关键字是使用堆
我看到写在某处new使用malloc.怎么会这样?它们不用于内存段?
C++中的"免费商店"这个术语描述了动态存储持续时间对象所在的位置."堆"这个词对于同一件事来说是一种口语.new可以使用malloc,那没关系.
但是,它也会执行其他操作,例如调用构造函数,并且可能代替malloc使用其他内存管理系统(例如内存池).
是的,它未free分配给您分配的对象new,主要是因为free不调用类析构函数.同样地,对于delete你创造的东西malloc:这样做会混合两种不同的分配/构造习语,虽然你可以使它起作用,但是这样做非常困难.
为什么这个内存段有两个名字?
因为"堆"(甚至不是"内存段")可能不是堆,所以它是一个愚蠢的术语.C++试图通过引入抽象"免费商店"来逐步淘汰它.不幸的是,人们不断说"堆"是因为(a)遗产,(b)复制猫自行车,(c)忽视抽象的目的/意义/价值,以及(d)教育/教学不良.