# IAllocator::Reallocate ```cpp virtual void* Reallocate(void* ptr, size_t newSize) = 0; ``` 调整已分配内存块的大小。如果 `ptr` 为 `nullptr`,行为等同于 `Allocate(newSize)`。如果 `newSize` 为 0,行为等同于 `Free(ptr)` 并返回 `nullptr`。如果分配器不支持重新分配,应返回 `nullptr` 并保持原内存不变。 **参数:** - `ptr` - 指向现有内存块的指针 - `newSize` - 新的字节大小 **返回:** 调整后的新内存块指针(可能与原指针不同) **复杂度:** O(n),需要分配新内存并复制数据 **示例:** ```cpp #include class MyAllocator : public IAllocator { public: void* Allocate(size_t size, size_t alignment = 0) override { return ::operator new(size); } void Free(void* ptr) override { if (ptr) ::operator delete(ptr); } void* Reallocate(void* ptr, size_t newSize) override { if (newSize == 0) { Free(ptr); return nullptr; } if (!ptr) return Allocate(newSize); size_t oldSize = /* 需要外部记录 */ 256; // 示例中硬编码 void* newPtr = Allocate(newSize); memcpy(newPtr, ptr, oldSize < newSize ? oldSize : newSize); Free(ptr); return newPtr; } // ... 其他方法实现 }; MyAllocator alloc; void* ptr = alloc.Allocate(128); void* bigger = alloc.Reallocate(ptr, 256); // 扩展到 256 字节 ``` ## 相关文档 - [IAllocator 总览](allocator.md) - 返回类总览