Установка QSharedPointer

Я прихожу из C # фона и до сих пор разбираюсь в умных указателях c ++ и Qt. Это должен быть основной вопрос:

В myClass.h

QSharedPointer<AccessFlags> m_flags;

В myClass.cpp я пытаюсь установить (установлено правильное слово?) Указатель m_flags

if(m_flags.isNull())
m_flags = new AccessFlags();class AccessFlags{
public:
QHash<QString,int> flags;
AccessFlags();  //The dictionary is setup in the constructor
};

Компилятор жалуется «нет соответствия для оператора =» в ..
Как мне установить указатель?

2

Решение

Вы пытаетесь назначить необработанный указатель на QSharedPointer в соответствии

m_flags = new AccessFlags();

Вы, вероятно, хотите что-то вроде

m_flags = QSharedPointer<AccessFlags>(new AccessFlags);
4

Другие решения

Рассмотреть возможность использования станд :: shared_ptr вместо QSharedPointer, если вы работаете с современным компилятором C ++ 11 (например, GCC 4.6 или выше и MSVC 10.0).

Во-первых, это стандарт, а во-вторых, вы могли бы использовать станд :: make_shared инициализировать указатель, который может быть быстрее! (Например, в MSVS2010 / 2012 выделение происходит только один раз для make_shared вместо двух выделений: одно для нового и одно для внутреннего счетчика).

4

По вопросам рекламы [email protected]