C++ 单例子类构造函数错误
我试图将一个单例子类化,但在尝试从派生类构造函数打印时遇到了错误 迈辛格尔顿C++ 单例子类构造函数错误,c++,c++11,singleton,C++,C++11,Singleton,我试图将一个单例子类化,但在尝试从派生类构造函数打印时遇到了错误 迈辛格尔顿 #ifndef mysingleton_h #define mysingleton_h #include <iostream> class mysingleton{ public: static mysingleton* singletoninstance; //The one and only one instance static mysingleton* getinstance();
#ifndef mysingleton_h
#define mysingleton_h
#include <iostream>
class mysingleton{
public:
static mysingleton* singletoninstance; //The one and only one instance
static mysingleton* getinstance();
virtual void dosomething() = 0 ;
protected:
mysingleton(const mysingleton&);
~mysingleton();
public:
mysingleton(){
}//Prevent clients from creating new singleton
};
class mysingleton_child:public mysingleton
{
public:
virtual void dosomething() {
std::cout <<"In Child Class \n";
}
mysingleton_child()
{
// std::cout <<"In Child Class \n";
}
~mysingleton_child();
};
主要职能:
#include <iostream>
#include "mysingleton.h"
int main ()
{
mysingleton *pointer = mysingleton::getinstance();
pointer->dosomething();
}
#包括
#包括“mysingleton.h”
int main()
{
mysingleton*指针=mysingleton::getinstance();
指针->剂量测量();
}
当我从mysingleton_子构造函数中取消注释该行时,我得到以下错误
//std::cout在这一行中,您允许每个人直接获取您的singleton实例:
static mysingleton* singletoninstance; //The one and only one instance
所以下一行没有意义:
static mysingleton* getinstance();
但问题是您声明了复制构造函数和析构函数,但没有在.cpp文件中定义它们:
mysingleton(const mysingleton&);
~mysingleton();
您还声明了普通构造函数并将其公开。这是个错误。你可以看看《四人帮》这本书来更好地理解单身汉。另外,请阅读有关为什么单身会很糟糕的
StackOverflow
文章。只需谷歌“singleton stack overflow bad”。既然您在类定义中声明了~mysingleton()和~mysingleton_child(),您应该提供它们的定义。singleton是一种反模式(只是美化了全局变量)。从长远来看,如果你忘记它们,你会更快乐。不要使用单件-请!和子类化mysingleton
?这从根本上违背了只有一个mysingleton
实例的承诺。问题与单例无关。如果您创建了一个@user2357112:那么,您仍然只有一个单例实例,只是每个派生对象只有一个实例:-)为什么?它是一个静态函数,我们试图通过它检索实例?所以不需要函数?你能解释一下为什么单例不需要静态函数吗?你需要一个静态函数来获得单例的一个实例。但是您不需要将指向实例的指针声明为public成员。通常它被宣布为私有。
mysingleton(const mysingleton&);
~mysingleton();