Класс Qsharedpointer

Я пытаюсь использовать класс смарт-указатель следующим образом

class A 
{

 friend  class B;
virtual methods ();

protected:
virtual ~classA();

}

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

}

Я планирую заменить вхождения класса A* на класс B. Является ли этот подход правильным?

1 ответ

Нет, это не совсем так. Похоже, что ваша цель дизайна в том, чтобы сделать невозможным выделение объекта типа 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;
}
Другие вопросы по тегам