设置QSharedPointer

时间:2012-11-06 02:06:26

标签: c++ qt 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 个答案:

答案 0 :(得分:4)

您正在尝试为行

中的QSharedPointer分配原始指针
m_flags = new AccessFlags();

你可能想要像

这样的东西
m_flags = QSharedPointer<AccessFlags>(new AccessFlags);

答案 1 :(得分:4)

如果使用现代C ++ 11编译器(例如GCC 4.6或更高版本以及MSVC 10.0),请考虑使用std::shared_ptr代替QSharedPointer。

首先,它是标准的第二件事,您可以使用std::make_shared来启动指针,这可以更快! (例如,在MSVS2010 / 2012中,对于make_shared仅分配一次,而是两次分配:一次用于new,一次用于内部计数器)。