верно ли я создаю интеллектуальный указатель (m_sipContent)?

Рейтинг: 0Ответов: 1Опубликовано: 27.07.2023

верно ли я создаю интеллектуальный указатель m_sipContent?

#include <QCoreApplication>


#include <QSharedPointer>

struct SipContent
{
    void run()
    {

    }
};

struct Session
{
    Session()
    {
        init();
    }

    void test()
    {
        m_sipContent->run();
    }

    void init();
    QSharedPointer<SipContent> m_sipContent;
};

void Session::init()
{
        m_sipContent = QSharedPointer<SipContent>();
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Session s;
    s.test();

    return a.exec();
}

Ответы

▲ 1Принят

Вы не создаёте объект, на который должен ссылаться ваш указатель. После вызова конструктора QSharedPointer<SipContent>() он ссылается на nullptr.

Делайте так:

m_sipContent = QSharedPointer<SipContent>(new SipContent);

Либо используйте shared_ptr:

std::shared_ptr<SipContent> m_sipContent;

...

m_sipContent = std::make_shared<SipContent>();