我来自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
};
编译器抱怨“在'运算符='中不匹配.. 如何设置指针?
答案 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,一次用于内部计数器)。