隐藏抽象基类的复制构造函数

时间:2014-07-16 15:10:37

标签: c++ inheritance polymorphism copy-constructor static-analysis

我有一个抽象基类,它有一些虚方法和一个虚析构函数。我想将基类(和派生类)的复制构造函数和赋值运算符设置为私有,因此我可以隐藏它们,静态分析工具(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&)’

我想隐藏赋值运算符和复制构造函数。当我们有虚拟析构函数时,这不是一个有效的行为,或者如果我想拥有相同的场景,是否有任何解决方案?

1 个答案:

答案 0 :(得分:2)

赋值运算符应返回引用:

Parent & operator= (const Parent&) {return *this;}
       ^

同样适用于Child。或者,如果你不关心链接分配,他们可以什么都不返回。

你们试图返回一个对象的副本,在Parent不可能的情况下,因为Parent是抽象的而且无法实例化。