【问题标题】:Setting QSharedPointer设置 QSharedPointer
【发布时间】:2015-10-22 17:15:07
【问题描述】:

我来自 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
};

编译器报错“'operator=' in.. 如何设置指针?

【问题讨论】:

  • 为什么m_flags后面有个.
  • 错字。没有复制和粘贴代码。

标签: c++ qt qsharedpointer


【解决方案1】:

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

m_flags = new AccessFlags();

你可能想要类似的东西

m_flags = QSharedPointer<AccessFlags>(new AccessFlags);

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 有一个静态的create方法,和std::make_shared一样,所以这里没有收获。而且,如果整个项目都使用 QT 类,则没有理由将标准类弄得一团糟,然后将一个类对象转换为另一个类对象。
    • 备案:create方法仅在Qt5中可用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 2017-06-09
    • 2016-11-06
    • 2011-04-22
    相关资源
    最近更新 更多