首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Q_DISABLE_COPY上的QScopedpointer失败

Q_DISABLE_COPY上的QScopedpointer失败
EN

Stack Overflow用户
提问于 2016-09-02 04:19:32
回答 1查看 332关注 0票数 1

对于从QObject派生的类,我使用QScopedPointer

MainWindow将其包含为:

代码语言:javascript
复制
private:
    QScopedPointer<CalculationManager> calculationManager;

然而,在构造函数中,这会失败:

代码语言:javascript
复制
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    calculationManager(QScopedPointer<CalculationManager>(new CalculationManager()))

qscopedpointer.h这一行

代码语言:javascript
复制
Q_DISABLE_COPY(QScopedPointer)

通过以下方式:

代码语言:javascript
复制
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)
                    ^

为什么要在哪里进行复制?

EN

回答 1

Stack Overflow用户

发布于 2016-09-02 04:23:22

正因为如此,如果你考虑这一行:

代码语言:javascript
复制
calculationManager(QScopedPointer<CalculationManager>(new CalculationManager()))

这里构造了一个QScopedPointer<CalculationManager>类型的临时对象,然后将其复制到calculationManager数据成员。

您可以这样做,以避免额外的副本:

代码语言:javascript
复制
calculationManager(new CalculationManager())

它将调用需要指向CalculationManager的指针的构造函数,并且不会发生任何复制。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39280245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档