我有兩個單例類。從一個班級到另一個班級是否安全?
第一個人持有對第二個成員的引用。
#include <memory>
class B
{
friend class A;
public:
static B& getInstance()
{
static B instance;
return instance;
}
private:
B()
: b(new int(5))
, c(8)
{};
B(B const&);
void operator=(B const&);
private:
std::auto_ptr<int> b;
int c;
};
class A
{
public:
static A& getInstance()
{
static A instance;
return instance;
}
private:
A()
: b(B::getInstance().b.get())
, cRef(B::getInstance().c)
{
};
A(A const&);
void operator=(A const&);
private:
int* b;
int& cRef;
};
int main()
{
return 0;
}
此代碼是否安全?
此代碼是100%安全的,因爲它什麼都不做。用這些類的用法填充'main()'。具體而言,我們感興趣的是您將調用哪種順序的方法。 (這是第一個不安全的地方,因爲你需要告訴用戶如何正確使用你的類,接口必須以某種方式設計,不允許以錯誤的方式使用它) – Drop