我有一个抽象基类,它有一些虚方法和一个虚析构函数。我想将基类(和派生类)的复制构造函数和赋值运算符设置为私有,因此我可以隐藏它们,静态分析工具(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&)’
我想隐藏赋值运算符和复制构造函数。当我们有虚拟析构函数时,这不是一个有效的行为,或者如果我想拥有相同的场景,是否有任何解决方案?
答案 0 :(得分:2)
赋值运算符应返回引用:
Parent & operator= (const Parent&) {return *this;}
^
同样适用于Child
。或者,如果你不关心链接分配,他们可以什么都不返回。
你们试图返回一个对象的副本,在Parent
不可能的情况下,因为Parent
是抽象的而且无法实例化。