我将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
的指针的构造函数,并且不会进行复制。