我将 QScopedPointer
用于派生自 QObject
的类。
MainWindow
包含它作为:
private:
QScopedPointer<CalculationManager> calculationManager;
然而在构造函数中这失败了:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
calculationManager(QScopedPointer<CalculationManager>(new CalculationManager()))
在 qscopedpointer.h
的行中:
Q_DISABLE_COPY(QScopedPointer)
与:
C:\Qt\5.7\mingw53_32\include/QtCore/qscopedpointer.h: In constructor 'MainWindow::MainWindow(QWidget*)':
C:\Qt\5.7\mingw53_32\include/QtCore/qscopedpointer.h:176:20: error: 'QScopedPointer<T, Cleanup>::QScopedPointer(const QScopedPointer<T, Cleanup>&) [with T = CalculationManager; Cleanup = QScopedPointerDeleter<CalculationManager>]' is private
Q_DISABLE_COPY(QScopedPointer)
^
复制发生的原因和地点?
最佳答案
QScopedPointer
没有移动构造函数。
因此,如果您考虑这一行:
calculationManager(QScopedPointer<CalculationManager>(new CalculationManager()))
这是一个 QScopedPointer<CalculationManager>
类型的临时对象构建然后复制到calculationManager
数据成员。
您可以这样做以避免额外的拷贝:
calculationManager(new CalculationManager())
它将调用需要指向 CalculationManager
指针的构造函数并且不会发生复制。
关于c++ - QScopedpointer 在 Q_DISABLE_COPY 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39280245/