我有一个奇怪的问题。太奇怪了,很可能很容易解决。
我创建了一个软件,我需要实现一个带有Sing对象的Sing类,该对象必须从该软件的所有类中都可以访问。因此,我在主函数中将其创建为单例对象。
我的问题是,如何在不创建指针的情况下从其他类(如ClassA)访问该对象,而该指针由指向代码中每个单个类的指针移交。
所有的类定义都位于sing.h文件中。如果将定义放入sing.cpp文件,编译器将失败。
我设法创建了这个唱歌对象,但是在ClassA中看不到它。如何在不将指针移交给每个类的构造函数的情况下看到对象唱歌?
sing.h文件:
#ifndef _SING_H_
#define _SING_H_
//declaration
class Singleton
{
public:
static Singleton* Instance();
static Singleton* InstanceSlave();
int a;
int setTest(int);
protected:
Singleton(){}
private:
static Singleton* _instance;
static Singleton* _instanceSlave;
};
//definitions (only work in header file, not in .cpp file
Singleton* Singleton::_instance =0;
Singleton* Singleton::Instance()
{
if (_instance == 0 )
{
_instance = new Singleton;
}
return _instance;
}
int Singleton::setTest(int b)
{
return 1;
}
#endif _CONF_H_
main.cpp文件:
int main()
{
Singleton* sing = sing->Instance();
sing->setTest(2);
ClassA* classa = new ClassA();
}
main.h文件:
#inlucde <iostream>
#include "sing.h"
#include "classA.h"
在ClassA内,我想要这样的东西:
A类
#inlude sing.h
class classA
{
public:
void doSomeThing(int);
}
classA.cpp:
#include ClassA.h
{
void ClassA::doSomeThing(int a)
{
sing.setTest(a);
}
}
最佳答案
我的问题是,如何在不创建指针的情况下从其他类(如ClassA)访问该对象,而该指针由指向代码中每个单个类的指针移交。
规范的方法是使用Scott Meyer's Singleton并提供静态函数,例如
static Singleton& Instance() {
static Singleton theInstance;
return theInstance;
}
用法是
Singleton::Instance().setTest(2);
通常,单例模式并不是真正的好技术,因为与其余代码的耦合太紧密了。最好使用接口(抽象类)并根据需要传递这些接口。