У меня есть абстрактный базовый класс, который имеет некоторые виртуальные методы и виртуальный деструктор. Я хочу, чтобы конструктор копирования и оператор присваивания базового класса (и производного класса) были закрытыми, поэтому я могу скрыть их, а инструмент статического анализа (klockwork) не может его отмечать. Это мой фрагмент кода:
class Parent: public mainParentClassIDontCareAbout
{
public:
Parent (int a);
virtual ~Parent ();
protected:
void doSomething();
.
.
private:
// Hide assignment operator and copy constructor
Parent (const Parent&) {};
Parent operator= (const Parent&) {return *this;};
} // end of parent class definition
class Child : public Parent
{
public:
Child (void *x, int y, bool z);
~Child ();
protected:
.
.
.
private:
// Hide assignment operator and copy constructor
Child (const Child&) {};
Child operator= (const Child&) {return *this;};
} // end of parent class definition
Однако, я получаю ошибку времени компиляции как:
invalid abstract return type for member function ‘Lib::Parent Lib::Parent::operator=(const Lib::Parent&)
Я хочу скрыть оператор присваивания и конструктор копирования. Это не допустимое поведение, когда у нас есть виртуальный деструктор или есть ли какие-либо решения, если я хочу иметь один и тот же сценарий?
Оператор присваивания должен возвращать ссылку:
Parent & operator= (const Parent&) {return *this;}
^
а также для Child
. Кроме того, они ничего не могут вернуть, если вам не нужны цепочки присвоений.
Ваша попытка вернуть копию объекта, который в случае Parent
невозможен, потому что Parent
является абстрактным и не может быть создан.