Qsharedpointer类

发布于 2024-10-25 10:18:16 字数 248 浏览 4 评论 0原文

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

class A 
{

 friend  class B;
virtual methods ();

protected:
virtual ~classA();

}

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

}

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

I am trying to use a smart pointer class in the following way

class A 
{

 friend  class B;
virtual methods ();

protected:
virtual ~classA();

}

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

}

I plan to replace occurrences of Class A* with class B. Is this approach correct?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

祁梦 2024-11-01 10:18:16

不,这并不是真正的方法。看起来你这里的设计目标是让某人不可能在不将其放入智能指针的情况下分配 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;
}

No this is not really the way to do this. It looks like your design goal here is to make it impossible for someone to allocate an object of type A without putting it in a smart pointer. The normal way to do this is not to inherit from the smart pointer, but to make your type have

  1. A private constructor
  2. A private destructor
  3. A public static factory method returning in this case QSharedPointer
  4. A private deleter class that is a friend of class A

Here is an example using boost::shared_ptr (I do not have a QT installation right now, but you should be able to just replace all instances of boost::shared_ptr with 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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文