Я хотел бы создать класс, который не может быть скопирован, поэтому я поместил конструктор копирования в приватный раздел:
class NotCopyable
{
public:
NotCopyable(const double& attr1, const double& attr2) : _attr1(attr1), _attr2(attr2) {}
~NotCopyable(void) {}
private:
NotCopyable& operator=(const NotCopyable&);
NotCopyable(const NotCopyable&);
double _attr1;
double _attr2;
};
Все в порядке, кроме случаев, когда я хочу присвоить массив:
NotCopyable arr[] =
{
NotCopyable(1, 0),
NotCopyable(2, 3)
};
Компилятор говорит, что она не может получить доступ к копирующему конструктору, как в приватном разделе.
Когда я выкладываю это в публичный раздел:
class NotCopyable
{
public:
NotCopyable(const double& attr1, const double& attr2) : _attr1(attr1), _attr2(attr2) {}
~NotCopyable(void) {}
NotCopyable(const NotCopyable&)
{
std::cout << "COPYING" << std:: endl;
}
private:
NotCopyable& operator=(const NotCopyable&);
double _attr1;
double _attr2;
};
Программа компилируется без ошибок, но конструктор копирования не вызывается. Итак, вопрос в том, как запретить копирование, но при этом можно назначать массивы?