0

我正在尝试通过以下方式使用智能指针类

class A 
{

 friend  class B;
virtual methods ();

protected:
virtual ~classA();

}

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

}

我计划将出现的 A* 类替换为 B 类。这种方法正确吗?

4

1 回答 1

3

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

  1. 私有构造函数
  2. 私有析构函数
  3. 在这种情况下返回一个公共静态工厂方法 QSharedPointer
  4. 一个私有删除器类,它是 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-30T02:21:07.593 回答