熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> C編程 >> 正文

privte的析構函數和構造函數

2013-11-12 23:34:03  來源: C編程 

  C++中是不允許virtual 構造函數的如果在構造函數前加virtual

  以vc為例編譯器報錯為inline is the only legal storage class for constructors

  雖然不明白這個跟inline有什麼關系但是錯誤是肯定的

  構造函數和析構函數都可以是private的這種情況下編譯通過但是該類無法被實例化即使繼承也不行

  例如

  class A

  {

  private:

  A();

  virtual ~A();

  };

  class B : public A

  {

  public:

  B();

  virtual ~B();

  };

  B b;

  以上代碼是編譯不通過的因為B() ~B()分別需要調用A()~A()而它們都是private的 所以無法調用

  解決方法只有friend包括friend class和 friend function例如可以將A的定義修改如下就可以實現

  class A

  {

  private:

  A();

  virtual ~A();

  friend class B;

  };

  或者friend函數也可以在內部生成A的變量因為它可以調用A的私有構造函數和析構函數


From:http://tw.wingwit.com/Article/program/c/201311/11107.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.