gpt4 book ai didi

c++ - 检查异步方法已在析构函数中完成

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:24:27 25 4
gpt4 key购买 nike

我有一个目前看起来像这样的类(伪伪代码):

class AsyncStore {
public:
AsyncStore();
~AsyncStore() {
// Make sure writes have flushed somehow
}

void write_something() {
// Issue an asynchronous write, and return immediately
}

void sync_writes() {
// Check all writes could be flushed, and throw if any failed
}
};

问题是析构函数无法发出错误信号(我们不能抛出,也不能以任何其他方式发出错误信号)。

理想情况下,此类的用户应在调用析构函数之前调用 sync_writes(),并处理抛出的任何异常,以便在析构时无需执行任何操作。

就目前而言,没有办法强制执行此操作。感觉这一定是一个相对常见的问题 - 有没有一种方法可以处理这个问题,这样我就可以保证在销毁时没有待处理的写入?

最佳答案

您可以强制 API 使用者在销毁对象之前调用 sync_writes。如果进入析构函数时有未完成的工作,terminate(),或执行其他一些紧急操作(例如不等待工作并记录错误)。

我认为这是一个 API 设计问题。只需决定调用者必须正确关闭对象并在运行时强制执行它。如果调用方违反 API 约定,他们将无法获得正确的结果。

还有一个替代方案:强制 API 使用者注册一个在出现错误时调用的回调。回调可以在构造函数中接受。

关于c++ - 检查异步方法已在析构函数中完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21412894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com