我正在阅读有关c ++分配器的内容,而deallocate函数的句子引起了我的注意:
参数n必须等于最初生成p的allocate()调用的第一个参数;否则,行为未定义。
为什么?为什么不能解除分配内存的一部分,愚蠢的例子是:
#include <memory>
#include <string>
int main()
{
std::allocator<std::string> alloc;
auto const p = alloc.allocate(20);
alloc.deallocate(p+10, 10);
return 0;
}
答案 0 :(得分:2)
有些分配器可能会这样做。 C ++规范只说明了抽象分配器接口Alloc<T>
的所有实现必需要执行的操作。委员会决定不要求你提出要求的功能。
我在这台计算机上没有C ++原理,但我怀疑你要求的功能不是必需的,因为C内存分配器功能(malloc
和free
)不能做到了, 1 并且C ++委员会希望能够在C库之上实现C ++库。
1 是的,realloc
可以做某些情况,但不是全部