Иногда необходимо запретить конструктор копирования в классе C ++, чтобы класс стал «не копируемым». Конечно, operator =
должен быть запрещен одновременно.
До сих пор я видел два способа сделать это. Способ 1 - объявить метод закрытым и не дать ему реализации:
class Class {
//useful stuff, then
private:
Class( const Class& ); //not implemented anywhere
void operator=( const Class& ); //not implemented anywhere
};
Способ 2 - объявить метод закрытым и дать ему «пустую» реализацию:
class Class {
//useful stuff, then
private:
Class( const Class& ) {}
void operator=( const Class& ) {}
};
ИМО, первый вариант лучше - даже если есть ' по какой-то неожиданной причине, которая приводит к тому, что конструктор копирования вызывается из той же функции-члена класса, позже будет ошибка компоновщика. Во втором случае этот сценарий останется незамеченным до времени выполнения.
Есть ли серьезные недостатки в первом методе? Что может быть лучше и почему?