设置 QSharedPointer

Dar*_*fer 2 c++ qt qsharedpointer

我来自 C# 背景,仍然对 C++ 和 Qt 智能指针有所了解。这应该是一个基本问题:

在 myClass.h 中

QSharedPointer<AccessFlags> m_flags;
Run Code Online (Sandbox Code Playgroud)

在 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
};
Run Code Online (Sandbox Code Playgroud)

编译器抱怨“没有匹配 'operator=' in.. 如何设置指针?

Fra*_*ser 5

您正在尝试将原始指针分配给QSharedPointer行中的 a

m_flags = new AccessFlags();
Run Code Online (Sandbox Code Playgroud)

你可能想要类似的东西

m_flags = QSharedPointer<AccessFlags>(new AccessFlags);
Run Code Online (Sandbox Code Playgroud)


小智 5

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

首先,这是一个标准,第二件事,您可以使用std::make_shared来初始化您的指针,这会更快!(例如,在 MSVS2010/2012 中,make_shared 分配只发生一次,而不是两次分配:一次用于新的,一次用于内部计数器)。