当STL分配器分配中发生错误时,是否应该调用deallocate函数


try
{
node = allocator.allocate(LIST_BASIC_UNIT);
}
catch (...)
{
allocator.deallocate(node);
throw;
}

当STL分配器分配中发生异常时,我应该调用deallocator吗?

您不能解除分配任何内容,因为没有可解除分配的内容。如果allocate()抛出,那么它在返回指针之前停止,并且在node可以分配任何值之前停止。因此,假设nodetry块之前是无效的(它应该是(,那么就没有有效的指针可以传递给deallocate()

如果给定的分配器实现无法保证在抛出异常时不会发生更改,那么这是该分配器的错误,而不是您的容器中的错误。

最新更新