Я хотел бы создать класс, который не может быть скопирован, так что я положил копирование конструктора в приватную секцию:Скрытого копирования конструктор C++
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;
};
Программа компилируется без ошибок, но копирование конструктор не вызывается. Поэтому возникает вопрос: как мне запретить копирование, но все же есть возможность назначать массивы?
невозможно. «присвоение» массивов по-прежнему «присваивание», которое вы пытаетесь запретить – valdo
Вы не можете назначить массивы. Код, показанный здесь, - это * инициализация * массива, который, даже если он использует тот же символ, не является присвоением. –
Вы можете прочитать следующее: http://physical-thought.blogspot.com/2008/08/noncopyable-c-class-which-cannot-be.html esp второй комментарий, написанный автором относительно того, когда вы хотите сделать это. –