gpt4 book ai didi

c++ - 这个 Singleton 替代方案好吗?

转载 作者:行者123 更新时间:2023-11-30 02:50:13 25 4
gpt4 key购买 nike

我正在为 GNU readline 制作一个简单的 C++ 包装器,称为 Console。 GNU 库在 C 中,并保持当前注册的执行各种任务的函数的全局状态。例如,它允许注册执行自动完成和其他任务的全局函数。

同时,我希望这个类维护一个本地状态,例如包含一些注册命令、当前历史记录等等,这些在控制台实例之间应该是不同的。鉴于我只允许在下面使用一个全局状态,我在任何给定时间都只能允许一个控制台。

但是,将控制台设为单例将意味着全局可访问性。因此,如果代码的一部分正在使用具有某些设置的控制台,它就不能假定它为控制台设置的设置和状态将保持不变,因为代码的任何其他部分都可以访问单例控制台。

由于我不喜欢那样,因为我希望将管理特定 I/O 的代码保持在一起,所以我认为将此类设为 Singleton 并不是一个好主意。我最初的解决方案是这样的:

class Console {
public:
Console() {
if ( instanced_ ) throw std::runtime_error("Console already instanced");
instanced_ = true;
}
static bool exists() { return instanced_; }
private:
static bool instanced_ /* = false */;
}

我当前的新解决方案,如本 answer 中所指出,是每次访问一个控制台时重置库的全局设置,而不是一次限制控制台实例的数量。还有其他我应该注意的选项吗?

最佳答案

抛出异常似乎有点苛刻。为什么不使用私有(private)构造函数并在第一次请求时初始化 Console,然后返回该实例。

关于c++ - 这个 Singleton 替代方案好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20614058/

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