对于从QObject派生的类,我使用QScopedPointer。
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)
^为什么要在哪里进行复制?
发布于 2016-09-02 04:23:22
正因为如此,如果你考虑这一行:
calculationManager(QScopedPointer<CalculationManager>(new CalculationManager()))这里构造了一个QScopedPointer<CalculationManager>类型的临时对象,然后将其复制到calculationManager数据成员。
您可以这样做,以避免额外的副本:
calculationManager(new CalculationManager())它将调用需要指向CalculationManager的指针的构造函数,并且不会发生任何复制。
https://stackoverflow.com/questions/39280245
复制相似问题