Я пробовал подкласс singleton, и я столкнулся с ошибкой, когда пытался выполнить печать из конструктора производного класса.ошибки конструктора подкласса singleton
mysingleton.h
#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();
};
mysingleton.cpp
#include "mysingleton.h"
mysingleton* mysingleton::singletoninstance = 0;
mysingleton* mysingleton :: getinstance()
{
if(!singletoninstance)
singletoninstance = new mysingleton_child();
return singletoninstance;
}
главный FUNC:
#include <iostream>
#include "mysingleton.h"
int main()
{
mysingleton *pointer = mysingleton::getinstance();
pointer->dosomething();
}
Я получаю ошибку ниже, когда я раскомментировать строку из mysingleton_child конструктора
// std::cout <<"In Child Class \n";
Ошибка:
Error : Undefined symbols for architecture x86_64: "mysingleton::~mysingleton()", referenced from: mysingleton_child::mysingleton_child()
Почему я не в состоянии написать что-нибудь в конструкторе? Вызывается вызванный конструктор или создается только конструктор базовых классов? Кроме того, когда я делаю базовые классы деструктором общедоступными, все работает нормально. Но если у нас есть публичный деструктор, любой уничтожит синглтон.
Не могли бы вы помочь мне с объяснением и заставить меня понять лучше.
Singletons - это анти-шаблон (только прославленные глобальные переменные). В долгосрочной перспективе вы будете намного счастливее, если просто забудете о них. Не используйте синглтоны - пожалуйста! –
И * подклассификация * 'mysingleton'? Это принципиально нарушает обещание, что будет только один экземпляр 'mysingleton'. – user2357112
Проблема не имеет ничего общего с синглонами. Вы бы это видели, если бы создали [mcve]. – juanchopanza