gpt4 book ai didi

c++ - 从 BOOST 或 C++14 类中删除 ACE_Singleton 和其他一些 Singleton 类

转载 作者:行者123 更新时间:2023-11-28 02:01:44 30 4
gpt4 key购买 nike

我们正在从 C++03 迁移到 C++14 并且我们决定从 ACE lib 开始。我们主要将 ACE 库用于 Singleton 对象和锁。因此,对于锁,我们可以使用 C++11/14 中的 mutex,但 ACE_SINGLETON 的更好替代品是什么。

最佳答案

#include <iostream>

class foo;

foo& get_foo();

class foo
{
friend foo& get_foo();;
private:
~foo () { std::cout << "foo destroyed" << std::endl; }
foo () { std::cout << "foo constructed" << std::endl; }
foo(const foo&) = delete;
foo& operator=(const foo&) = delete;
};

foo&
get_foo()
{
static foo f;
return f;
}

int
main()
{
auto& f = get_foo();
}

如果您使用的是 Visual Studio,则需要 VS-2015 或更高版本。

线程局部静态在 C++11 及更高版本中具有线程安全初始化。

更新

template <class T>
class Singleton
{
public:
static T& getinstance()
{
static T t;
return t;
}
};

?

但归根结底,我是 KISS 的忠实粉丝。没有什么比编写 get_foo() 更简单的了。单例的工厂函数(多亏了线程安全函数局部静态)。由于语言现在提供了困难的部分(线程安全初始化),class Singleton<T>恕我直言,增加的值(value)很小。

这是我最近写的代码,表明我在练习我所说的话:

https://github.com/HowardHinnant/date/blob/master/src/tz.cpp#L573-L578

在这种特殊情况下,我需要为我的单例创建一个相当复杂的构造过程,甚至需要偶尔重新初始化它的能力。但它仍然归结为一个工厂函数,包裹在一个局部静态函数中。

关于c++ - 从 BOOST 或 C++14 类中删除 ACE_Singleton 和其他一些 Singleton 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39273648/

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