monotonic_buffer_resource 和异常处理

问题描述 投票:0回答:1

monotonic_buffer_resource
的工作方式有点像堆栈,只支持入栈而不支持出栈。不幸的是,我看不出如何在捕获异常时恢复到之前的状态。

即使在没有异常处理的情况下手动处理错误,您可能仍然需要将数据回滚到之前的状态。如何捕获此分配器资源的状态并稍后恢复到该状态?如果不可能,我可以使用其他资源吗?也许是非标准的?

否则,我是否错过了

monotonic_buffer_resource
缺乏任何手段恢复到之前状态的原因?在我看来,这应该非常简单,因为该分配资源无论如何都会跳过对析构函数的调用。

c++ c++17 allocator
1个回答
0
投票

虽然这个分配器是一个“堆栈分配器”,但这并不意味着它产生的分配是以任何方式受到线程的实际执行堆栈的约束。也就是说,仅仅因为将堆栈展开到某个点并不意味着在执行堆栈现在终止的部分中发生的所有分配现在都已失效。

您可以将这些分配用作某个对象的一部分,该对象现在驻留在展开后幸存下来的某个其他对象中。你不知道;你无法知道,因为分配器不跟踪单独的分配。事实上,不跟踪个人分配是重点

因为执行堆栈和分配堆栈是完全分开的,所以对两者之间的关系假设任何事情都是非常危险的。如果您对如何使用单调分配非常严格,那么您“可能”能够做您正在谈论的事情。但由于没有要求你这样做(而且非常非常容易出错),所以真的没有意义。 此外,它违背了类的设计意图。再说一遍,重点是它跟踪个人分配。你分配了一堆东西,然后同时把它们“全部”扔掉。这就是使用模式。如果您的使用模式是分配一堆东西,扔掉其中一些,然后分配更多,然后扔掉所有东西,这是一种不同的使用模式。

或者你只有两个。

© www.soinside.com 2019 - 2024. All rights reserved.