我在Windows 7平台上使用Qt5。
我已经为我使用的数据库实现了Singleton。
到目前为止,还可以,可以正常工作,但是当我编译代码时,我总是收到2条与复制构造函数和赋值运算符有关的警告。
这是代码:
class DataBase : public QObject
{
Q_OBJECT
public:
static DataBase * instance(QObject * parent = 0);
static void destroy();
//
QString openDataBaseConnection();
void closeDataBaseConnection(QString & connectionName);
private:
DataBase(QObject * parent);
~DataBase();
DataBase(DataBase const &){} // <- copy constructor
DataBase & operator = (DataBase const &){} // <- assignment operator
static DataBase * pInstance;
};
这是编译器警告:
1)基类QObject应该在复制构造函数中显式初始化
2)函数中没有return语句返回非空(这是用于赋值运算符代码行)。
那么,为了最终摆脱这两个警告,我该怎么办?
尝试QObject
使用具有相同的父对象初始化base other
:
DataBase(DataBase const& other) :
QObject(other.parent())
// copy-construct members
{
}
的operator=
外观如下:
DataBase &operator=(DataBase const& other)
{
QObject::operator=(other);
// copy-assign members
return *this;
}
警告是关于您忘记了return *this;
。
请注意,您正在执行的操作不是默认实现。他们什么都不做!
您可能想要使用default
关键字(如果您使用C ++ 11或更高版本进行编译),则将这些功能的实现留给编译器处理:
DataBase(DataBase const &) = default;
DataBase &operator=(DataBase const&) = default;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句