我有一个奇怪的问题。太奇怪了,很可能很容易解决。

我创建了一个软件,我需要实现一个带有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);




通常,单例模式并不是真正的好技术,因为与其余代码的耦合太紧密了。最好使用接口(抽象类)并根据需要传递这些接口。

09-11 02:28