Qt5:如何摆脱这个Singleton的编译器警告?

时间:2015-12-23 21:39:34

标签: c++ qt singleton warnings compiler-warnings

我在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语句返回非void(赋值运算符代码行的那个)。

那么,为了最终摆脱这两个警告,我能做些什么呢?

1 个答案:

答案 0 :(得分:1)

  1. 尝试使用与functools.partial相同的父级初始化QObject base:

    other
  2. DataBase(DataBase const& other) : QObject(other.parent()) // copy-construct members { } 应如下所示:

    operator=

    警告是关于you forgot to return *this;

  3. 请注意,您所做的不是默认实现。他们什么都不做!

    您可能希望使用default关键字(如果您在C ++ 11或更高版本下进行编译)将这些函数的实现留给编译器:

    DataBase &operator=(DataBase const& other)
    {
        QObject::operator=(other);
        // copy-assign members
        return *this;
    }