Я создал ниже синглтон-класс и определил конструктор копирования и оператор присваивания как частный.Когда я вызываю конструктор копирования или оператор присваивания, он не вызывает конструктор копирования и оператор присваивания (возможно, из-за статического создания объекта).Поэтому мой вопрос заключается в том, почему шаблон одноэлементного проектирования позволяет создавать копию объекта или назначать новый объект (что нарушает базовое требование создания отдельного экземпляра класса) из ранее созданного объекта, даже если они объявлены закрытыми в классе?
Для подробностей рассмотрите приведенный ниже код: -
#include <iostream>
#include "conio.h"
class singleton
{
static singleton *s;
int i;
singleton()
{
};
singleton(int x):i(x)
{ cout<<"\n Calling one argument constructor";
};
singleton(const singleton&)
{
cout<<"\n Private copy constructor";
}
singleton &operator=(singleton&)
{
cout<<"\n Private Assignment Operator";
}
public:
static singleton *getInstance()
{
if(!s)
{
cout<<"\n New Object Created\n ";
s=new singleton();
return s;
}
else
{
cout<<"\n Using Old Object \n ";
return s;
}
}
int getValue()
{
cout<<"i = "<<i<<"\n";
return i;
}
int setValue(int n)
{
i=n;
}
};
singleton* singleton::s=0;
int main()
{
// Creating first object
singleton *s1= singleton::getInstance();
s1->getValue();
singleton *s4=s1; // Calling copy constructor-not invoking copy ctor
singleton *s5;
s5=s1; // calling assignment operator-not invoking assign ope
//Creating second object
singleton *s2=singleton::getInstance();
s2->setValue(32);
s2->getValue();
//Creating third object
singleton *s3=singleton::getInstance();
s3->setValue(42);
s3->getValue();
getch();
return 0;
}
Я что-то упустил или мое понимание неверно.
Пожалуйста, помогите в этом.Заранее спасибо.