Qsharedpointer类

时间:2011-03-21 21:29:53

标签: c++ qt qsharedpointer

我试图以下列方式使用智能指针类

class A 
{

 friend  class B;
virtual methods ();

protected:
virtual ~classA();

}

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

}

我打算用B类替换A类*的出现。这种方法是否正确?

1 个答案:

答案 0 :(得分:3)

不,这不是真正的方法。看起来你的设计目标是让某人无法将其放入智能指针中来分配类型A的对象。执行此操作的常规方法不是从智能指针继承,而是使您的类型具有

  1. 私人构造函数
  2. 私人析构函数
  3. 在这种情况下返回的公共静态工厂方法QSharedPointer
  4. 属于A类朋友的私人删除者类
  5. 以下是使用boost :: shared_ptr的示例(我现在没有QT安装,但您应该能够用QSharedPointer替换boost :: shared_ptr的所有实例)

    #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;
    }