0
假设我有这样的自定义类以上使用默认生成的拷贝构造函数Q_DECLARE_METATYPE
struct Analytics : public QObject
{
Q_OBJECT
public:
int a = 12;
Analytics(const Analytics& a) {
}
Analytics(){
}
};
Q_DECLARE_METATYPE(Analytics)
工作正常。不过,我必须提供自己的拷贝构造函数。然而 我想这使用的是默认生成的拷贝构造器出现错误
结构分析:公共QObject的 { Q_OBJECT
public:
int a = 12;
Analytics(const Analytics& a) = default;
Analytics(){
}
};
Q_DECLARE_METATYPE(Analytics)
这是错误,我得到
5: error: call to implicitly-deleted copy constructor of 'Analytics'
return new (where) T(*static_cast<const T*>(t));
是有可能将Q_DECLARE_METATYPE与默认生成的拷贝构造函数一起使用。
但是,如果我添加一个拷贝构造函数并通过信号在栈上传递一个对象(不是ptr),那么插槽会收到一个副本,我是正确的吗? –
只要注意Analytis是结构,而不是类。如果您将Google Analytics定义为类,则会出现复制构造函数为私有的错误。 QObject不支持通过设计进行复制,不要这样做。你也不需要为从QObject派生的类使用Q_DECLARE_METATYPE。你为什么想要做'Q_DECLARE_METATYPE(Analytics)'? –