gpt4 book ai didi

c++ - 单例类和多重继承

转载 作者:行者123 更新时间:2023-11-28 05:56:44 25 4
gpt4 key购买 nike

假设我有以下单例基类:

template <class Derived>
class Singleton
{
public:

inline static Derived* get();

protected:

Singleton();
~Singleton();
static std::unique_ptr<Derived> _uptr;

private:

Singleton(const Singleton&);
Singleton & operator = (const Singleton&);
};

// Initialize the singleton object.
template <class Derived>
std::unique_ptr<Derived> Singleton<Derived>::_uptr = nullptr;

// Constructor
template <class Derived>
Singleton<Derived>::Singleton() {
}

// Constructor
template <class Derived>
Singleton<Derived>::~Singleton() {
}

// Function: get
template <class Derived>
inline Derived* Singleton<Derived>::get() {
if(_uptr != nullptr) return _uptr.get();
std::unique_ptr<Derived> tmp(new Derived());
_uptr = std::move(tmp);
return _uptr.get();
}

我有以下派生类:

class Foo : public Singleton <Foo> {
public:
int value;
}

int main() {
Foo A;
Foo B;
A.value = 1;
B.value = 2;
A.get()->value = 3;
cout << A.value << endl; // we get 1
cout << B.value << endl; // we get 2
cout << A.get()->value() << " " << B.get()->value() << endl; // we get 3
}

我想知道为什么这三种方法在 value 上给出完全不同的输出。 A 和 B 不应该返回相同的值,因为它们继承了相同的单例基础吗?更具体地说,我想实现一个具有全局范围并且只会启动一次的类。

最佳答案

您仍然需要明确删除派生单例类中的(自动创建的)默认构造函数和赋值运算符,以禁止实例化多个实例:

class Foo : public Singleton <Foo> {
public:
int value;
delete Foo();
delete Foo(const Foo&);
delete Foo& operator(const Foo&);
}

关于c++ - 单例类和多重继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34005636/

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