qt - 在没有指针的情况下在 Qt 中 move 语义?

标签 qt c++11 qt5 move move-semantics

我有一个 Qt 项目,其中有一个对象,需要多次复制。因此我想添加 move 语义。

#ifndef OBJECTTOCOPY_H
#define OBJECTTOCOPY_H

#include <QColor>
#include <QString>
#include <QDataStream>
namespace level_1     {
namespace level_2 {
class ObjectToCopy {
public:

  explicit ObjectToCopy(const QString& _name = "", const QColor& colorBody = QColor() );

  // MOVE
  ObjectToCopy(ObjectToCopy && other);  

  static quint32 _valueInt32;
  static quint16 _valueInt16;
  QString _name;
  QColor  _colorBody;

private:
};
}
}
#endif // OBJECTTOCOPY_H

我如何窃取成员变量的指针,因为它们不是指针?

ObjectToCopy::ObjectToCopy (ObjectToCopy&& other)
    : _valueInt32( other._valueInt32  )
    , _valueInt16( other._valueInt16 )
    , _name( other._name )
    , _colorBody( other._colorBody )
{
    other._valueInt32 = 0;
    other._valueInt16 = 0;
    other.name.clear();
    other._colorBody = QColor();    
}
  1. 这对非指针有意义吗?
  2. 是否可以像 string.clear(); 一样重置 QString ?为垃圾收集器做标记?
  3. 如何重置 QColor 对象?

最佳答案

您当然可以添加 move 语义,但在您的情况下根本不需要这样做。 quint32, quint16 通过复制 move 。 QColor 是 union 的包装器,没有 move 构造函数(也不需要),也可以通过复制 move 。 QString 是 QT 中的引用计数类型。它在最近版本的库中有 move 构造函数,但速度差异很小(交换指针和递增引用计数器之间的差异)。

关于qt - 在没有指针的情况下在 Qt 中 move 语义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31807158/

相关文章:

c++ - 如何在一个qt qml窗口中运行并显示4个可执行文件?

c++ - 将 QObject 类公开到 qml 时,在 Qt 中管理内存的正确方法?

c++ - Qt QNetworkAccessManager 和 Slot 不工作

c++ - Qt,从客户端发送多种数据类型到服务器+数据流

c++ - std::put_time 的 MSVC 实现

c++ - 错误 : 'QTabWidget::QTabWidget(const QTabWidget&)' is private

c++ - 如何从 Windows 为 Amazon 的 EC2 CentOS 5 编译 C++ 应用程序?

c++ - 在 Visual Studio 中更改(使用旧的)c++ 版本

c++ - 在 move 构造函数之前调用析构函数?

qt - 使用 QML 的大型项目示例?