gpt4 book ai didi

c++ - 从定义的复制构造函数调用默认(隐式)复制构造函数

转载 作者:搜寻专家 更新时间:2023-10-31 02:17:13 25 4
gpt4 key购买 nike

我看了很多关于这个的帖子,但是我找不到答案

在我的 Qt 应用程序中,我使用 QSignalSpy捕捉信号。它的其中一个参数具有用户定义的数据类型。要捕获这样的参数,我必须首先使用 QMetaType 向 Qt 注册该数据类型。并使用宏 Q_DECLARE_METATYPE .它说

This macro makes the type Type known to QMetaType as long as it provides a public default constructor, a public copy constructor and a public destructor. It is needed to use the type Type as a custom type in QVariant.

问题:我有一个只定义了构造函数的 CustomData 类。现在,除非我显式声明析构函数和复制构造函数,否则 Qt 会抛出错误。我想使用 C++ 提供的隐式析构函数和复制构造函数。对于析构函数,我使用了

~CustomData() = default;

它使用默认的析构函数。但是我不能对复制构造函数使用类似的语句。会用

CustomData( const CustomData& ) {};

调用隐式拷贝构造函数?

(我这样做是因为我想保留隐式复制构造函数的行为)提前致谢。

CustomData 类如下所示

#include <QMetaType>
#include <QString>

class CustomData : public QObject
{
Q_OBJECT

public:
CustomData(QObject *parent = NULL);
~CustomData() = default; // I added this line
//Will the next line call the implicit copy constructor?
CustomData(const CustomData&) {}; //I added this line


enum CustomMode {mode1, mode2, mode3};

void somePublicMethod();

signals:
void completed(CustomData *data);

private slots:
void customComplete();

private:
CustomMode _mode;
QString _path;

CustomData *_chained;
};

Q_DECLARE_METATYPE(CustomData)

最佳答案

简而言之——没关系。您的实现不会(希望)造成任何影响。

如果你通过 Qt documentation ,它表示如下

QObject has neither a copy constructor nor an assignment operator. This is by design. Actually, they are declared, but in a private section with the macro Q_DISABLE_COPY(). In fact, all Qt classes derived from QObject (direct or indirect) use this macro to declare their copy constructor and assignment operator to be private.

完成这个 -- Q_DISABLE_COPY() .

这要求您使用指针来完成工作。看这个thread其中讨论了如何在 Qt 中复制对象。

关于c++ - 从定义的复制构造函数调用默认(隐式)复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35916845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com