【问题标题】:Qsharedpointer classQsharedpointer 类
【发布时间】:2015-10-22 17:08:45
【问题描述】:

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

class A 
{

 friend  class B;
virtual methods ();

protected:
virtual ~classA();

}

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

}

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

【问题讨论】:

标签: c++ qt qsharedpointer


【解决方案1】:

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

  1. 私有构造函数
  2. 私有析构函数
  3. 在这种情况下返回 QSharedPointer 的公共静态工厂方法
  4. 一个私有删除器类,它是 A 类的朋友

这里是一个使用 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 2017-06-09
    • 2016-11-06
    • 2011-04-22
    相关资源
    最近更新 更多