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)'? –