シングルトン デザイン パターンの使い方を学んでいます。簡単なコードを書き、コンストラクターのオーバーロードと、ポインターを削除する終了関数を含めました。問題は、コンストラクターのオーバーロードが機能せず、2 つのパラメーターを必要としないことです。理由がわからない?
//header============================================
#include <iostream>
using namespace std;
class singleton
{
public:
static singleton* getInstance();
static singleton* getInstance(int wIn,int lIn);
static void terminate();// memmory management
int getArea();// just to test the output
private:
static bool flag;
singleton(int wIn, int lIn);
singleton();
static singleton* single;
int width,len;
};
//implement=============================
#include "singleton.h"
#include <iostream>
using namespace std;
int singleton::getArea(){
return width*len;
}
singleton* singleton::getInstance(int wIn,int lIn){
if (!flag)
{
single= new singleton(wIn,lIn);
flag= true;
return single;
}
else
return single;
}
singleton* singleton::getInstance(){
if (!flag)
{
single= new singleton;
flag=true;
return single;
}
else
{
return single;
}
}
void singleton::terminate(){
delete single;
single= NULL;
perror("Recover allocated mem ");
}
singleton::singleton(int wIn,int lIn){
width= wIn;
len= lIn;
}
singleton::singleton(){
width= 8;
len= 8;
}
//main=======================================
#include <iostream>
#include "singleton.h"
bool singleton::flag= false;
singleton* singleton::single= NULL;
int main(){
singleton* a= singleton::getInstance();
singleton* b= singleton::getInstance(9,12);
cout << a->getArea()<<endl;
//a->terminate();
cout << b->getArea()<<endl;
a->terminate();
b->terminate();
return 0;
}