try
{
node = allocator.allocate(LIST_BASIC_UNIT);
}
catch (...)
{
allocator.deallocate(node);
throw;
}
当STL分配器分配中发生异常时,我应该调用deallocator吗?
您不能解除分配任何内容,因为没有可解除分配的内容。如果allocate()
抛出,那么它在返回指针之前停止,并且在node
可以分配任何值之前停止。因此,假设node
在try
块之前是无效的(它应该是(,那么就没有有效的指针可以传递给deallocate()
。
如果给定的分配器实现无法保证在抛出异常时不会发生更改,那么这是该分配器的错误,而不是您的容器中的错误。