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

09-06 19:32