不,這不是真的做到這一點的方式。它看起來像你的設計目標是在這裏做不可能有人不把它在一個智能指針分配A型的對象。正常的方式做,這是不是從智能指針繼承,而是爲了讓你的類型有
- 私有構造
- 私人析構函數
- 公共靜態工廠方法在這種情況下QSharedPointer
返回
- 私人刪除器類是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;
}
來源
2011-03-30 02:21:07
ltc
你想做什麼? – 2011-03-21 21:40:51
爲什麼你從QSharedPointer繼承?這對我來說沒有任何意義。有沒有虛方法重新實現(這使繼承毫無意義),沒有虛析構函數(這使得它的危險)。爲什麼不使用QSharedPointer ?如果你想要的只是一個更好的名字,使用typedef。 – 2011-03-21 22:14:58
我想確保B類可以訪問類A的析構函數的保護,當引用計數爲零 – Vij 2011-03-22 15:00:19