シングルトンクラスのコピーコンストラクタを作成して、新しいオブジェクトの作成を防止するにはどうすればよいですか?そして、コピーコンストラクタコードを記述し、さらにオブジェクトの作成のためprvention等しい演算子をオーバーロードする方法と同じシングルトンクラスの場合にはコピーコンストラクタをどのように書くべきですか?
# include<iostream>
# include<stdio.h>
# include<conio.h>
using namespace std;
class Rect
{
int length;
int breadth;
static int count;
static int maxcount;
Rect()
{};
Rect(const Rect& abc){};
public :
~Rect();
int area_rect()
{return length*breadth;}
void set_value(int a,int b);
static Rect* instance()
{
Rect* ptr=NULL;
if(count < maxcount)
{
ptr=new Rect ;
count++;
}
return ptr;
}
};
int Rect::count = 0;
int Rect::maxcount = 1;
void Rect::set_value(int a,int b)
{
length=a;
breadth=b;
}
Rect::~Rect()
{
count --;
}
int main()
{
Rect* a= Rect::instance(); //creates first object
// Rect* c= Rect::instance(); //fails to create second object
//as maxcount=1 and returns NULL
a->set_value(10,3);
cout << "area realted to object a : " << a->area_rect() <<"\n";
Rect* b=a;//allows creation of second object which i dont want
b->set_value(10,4);
cout << "area realted to object b : " << b->area_rect() <<"\n";
delete a;
delete b;
getch();
return 0;
}
ために=演算子をオーバーロードするためのベストプラクティスは何ですか?
「ベストプラクティス」は、シングルトンを全く持たないことだと思います。あなたが1つ以上持っていたくない場合は、1つ以上を作ってはいけません。 –
@KerrekSB他の誰かが同じアプリケーションで動いていて、それを初めて使っていて、別のオブジェクトを作って、それが起こりたくないのですか? – Invictus
Rect * b = a; 2番目のオブジェクトを作成しません。 "b"は "a"へのポインタになるでしょう – Neox