【发布时间】:2019-07-25 06:12:04
【问题描述】:
我正在从静态方法访问非静态方法。下面是代码。我读到了它糟糕的设计source。为什么这个糟糕的设计请帮助我理解。 如果是这样,如何实现它。
#include<iostream>
class Base
{
public :
static Base* initialiser;
void BaseMethod()
{
std::cout<<"Non static method Invoked"<<std::endl;
}
static Base* GetInstance()
{
if (!initialiser)
initialiser = new Base();
return initialiser;
}
};
Base* Base::initialiser = nullptr;
class Service
{
public:
void ServiceMethod()
{
Base::GetInstance()->BaseMethod();
}
};
int main()
{
Service obj;
obj.ServiceMethod();
}
【问题讨论】:
-
我看不出你的代码有什么问题。无论如何,大多数设计问题要么是意见问题,要么取决于具体情况。
-
单例和全局状态通常可以说是糟糕的设计。从静态成员函数调用非静态成员函数只是一个装饰细节,根本不是设计问题。
-
你的
GetInstance方法应该使用函数级静态变量来存储和初始化单例,这样更简单,代码更少,更安全 -
在这种情况下甚至有理由使用单例吗?
标签: c++ c++11 static-methods non-static