Singleton结构。有人能告诉我怎么做吗?

时间:2013-03-03 18:42:08

标签: c++ singleton

有人给了我制作单例结构的示例代码。现在我一直在尝试添加它(POD成员)并实际使用它(首先在main()然后,leter,在其他函数中)。它汇总了我试图添加的行。有人可以告诉我如何做我正在尝试做的事情吗?

有人给了我制作单例结构的示例代码。现在我一直在尝试添加它(POD成员)并实际使用它(首先在main()然后,leter,在其他函数中)。它汇总了我试图添加的行。有人可以告诉我如何做我正在尝试做的事情吗?

//What - oh - what, does one have to do to get this sob to format the code correctly!

#include<iostream>
using namespace std;

const int MAXNAME = 31;

struct Singleton {
private:

Singleton() {}
Singleton(const Singleton&); // Disabling copy-ctor
Singleton& operator=(const Singleton&);

static Singleton* instance;

public:

int DeptNum;
char Name[MAXNAME];
int Age;
int EmplID;  // key field

static Singleton* GetInstance() {
    if (!instance)
        instance = new Singleton();

    return instance;
}

};

Singleton* Singleton::instance = NULL;
//Singleton* TmpRec = Singleton* Singleton::instance;  <-   COMMENTED BECAUSE WRONG

int main(void) {

   //Access POD members and load them with data

   //TmpRec-> DeptNum = 30;  <- COMMENTED BECAUSE WRONG

   //Print out POD members

   //cout << "Value of DeptNum is: " << TmpRec->DeptNum << endl;  <- COMMENTED BECAUSE WRONG

   return 0;
}

PS:这件事在格式化代码上杀了我......


编辑:

问题不在于我是否应该使用单身人士。这不是关于单身人士在实践中是好还是坏。这不是我之前提出的关于单例结构的任何问题(结构是这里的操作词 - 而不是类)。这甚至不是结构和类之间的区别。

我花了很多钱来学习如何最好地学习。是的,我也一直在学习基础知识。这个问题的目的是获得一个实际可行的小代码(编译时没有错误,并且我需要在操作中看到几个简单的事情)。

因为你不喜欢我的问题而贬低我?好吧,我无法控制,我猜这是人的特权。

那些想要添加实际建设性的人...非常感谢。

那些只是表现得像......呃'下摆的人!无论如何都撇开你......

2 个答案:

答案 0 :(得分:1)

代码不正确,因为您使用的是私有数据成员实例而不是公共成员函数GetInstance()。

答案 1 :(得分:1)

第一部分很好,第二部分应该是:

Singleton* TmpRec = NULL;

int main(void) {
    TmpRec = Singleton::GetInstance();
    TmpRec->DeptNum = 30;
    cout << "Value of DeptNum is: " << TmpRec->DeptNum << endl;
    return 0;
}

请注意,在main中调用了GetInstance,并且从不使用:: instance。

至于完全正常工作的代码,这里是一个使用引用而不是指针的版本:

#include<iostream>
using namespace std;

const int MAXNAME = 31;

struct Singleton {
private:
    Singleton() {}
    Singleton(const Singleton&);
    Singleton& operator=(const Singleton&);

    static Singleton* instance;

public:
    int DeptNum;
    char Name[MAXNAME];
    int Age;
    int EmplID;

    static Singleton& GetInstance() {
        if (!instance) {
            instance = new Singleton();
        }
        return *instance;
    }
};
Singleton* Singleton::instance = NULL;

int main(void) {
    Singleton &TmpRec = Singleton::GetInstance( );
    TmpRec.DeptNum = 30;
    cout << "Value of DeptNum is: " << TmpRec.DeptNum << endl;
    return 0;
}