2011-03-21 59 views
0

我想通過以下方式Qsharedpointer類

class A 
{ 

friend class B; 
virtual methods(); 

protected: 
virtual ~classA(); 

} 

class B:public QSharedPointer<class A> 
{ 
    class B(); 
~ class B(); 

} 

我計劃B類來代替A級*的出現爲使用智能指針類是這種做法是否正確?

+0

你想做什麼? – 2011-03-21 21:40:51

+3

爲什麼你從QSharedPointer繼承?這對我來說沒有任何意義。有沒有虛方法重新實現(這使繼承毫無意義),沒有虛析構函數(這使得它的危險)。爲什麼不使用QSharedPointer ?如果你想要的只是一個更好的名字,使用typedef。 – 2011-03-21 22:14:58

回答

3

不,這不是真的做到這一點的方式。它看起來像你的設計目標是在這裏做不可能有人不把它在一個智能指針分配A型的對象。正常的方式做,這是不是從智能指針繼承,而是爲了讓你的類型有

  1. 私有構造
  2. 私人析構函數
  3. 公共靜態工廠方法在這種情況下QSharedPointer
  4. 返回
  5. 私人刪除器類是A類

這裏的一個朋友是使用boost :: shared_ptr的一個例子(我沒有QT安裝的權利,但你應該能夠只需更換所有boost :: shared_ptr與QSharedPointer實例)

#include <boost/shared_ptr.hpp> 

class A { 
private: 
    A() {} 
    ~A() {} 


    struct deleter { 
      void operator()(A* val) {delete val;} 
    }; 
    friend class deleter; 
public: 
    static boost::shared_ptr<A> create() { 
      return boost::shared_ptr<A>(new A(), A::deleter()); 
    } 

}; 

int main() 
{ 
    //A a1;    //compile error 
    //A *a2 = new A();  //compile error 
    boost::shared_ptr<A> a3 = A::create(); 

    return 0; 
} 
相關問題