Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设置QSharedPointer 我来自C背景,仍然在头脑中寻找C++和QT智能指针。这应该是一个基本问题:_C++_Qt_Qsharedpointer - Fatal编程技术网

设置QSharedPointer 我来自C背景,仍然在头脑中寻找C++和QT智能指针。这应该是一个基本问题:

设置QSharedPointer 我来自C背景,仍然在头脑中寻找C++和QT智能指针。这应该是一个基本问题:,c++,qt,qsharedpointer,C++,Qt,Qsharedpointer,在我的班级里 QSharedPointer<AccessFlags> m_flags; QSharedPointer m_标志; 在myClass.cpp中,我试图设置(设置的单词是否正确?)m_标志指针 if(m_flags.isNull()) m_flags = new AccessFlags(); class AccessFlags{ public: QHash<QString,int> flags; AccessFlags();

在我的班级里

QSharedPointer<AccessFlags> m_flags;
QSharedPointer m_标志;
在myClass.cpp中,我试图设置(设置的单词是否正确?)m_标志指针

if(m_flags.isNull())
    m_flags = new AccessFlags();


class AccessFlags{
public:
     QHash<QString,int> flags;
     AccessFlags();  //The dictionary is setup in the constructor
};
if(m_flags.isNull())
m_flags=new AccessFlags();
类访问标志{
公众:
QHash标志;
AccessFlags();//字典是在构造函数中设置的
};
编译器在..中抱怨“运算符=”不匹配。。
如何设置指针?

您试图将原始指针分配给行中的
QSharedPointer

m_flags = new AccessFlags();
你可能想要像这样的东西

m_flags = QSharedPointer<AccessFlags>(new AccessFlags);
m_flags=QSharedPointer(新访问标志);
如果您使用现代C++11编译器(例如GCC 4.6或更高版本和MSVC 10.0),请考虑改用QSharedPointer


首先,这是一个标准,第二件事,您可以使用它初始化您的指针,这可以更快!(例如,在MSVS2010/2012中,make_shared只发生一次分配,而不是两次分配:一次用于new,另一次用于internal counter).

为什么在
m_flags
之后会出现
?打字错误。没有复制和粘贴代码。有一个静态的
create
方法,它与
std::make_shared
相同,所以这里没有收益。如果整个项目都使用QT类,那么就没有理由用标准类创建混乱,然后进行痛苦的转换一个类指向另一个类。对于记录:
create
方法仅在Qt5中可用