使用两个getInstance()方法移交父指针的Singleton?

时间:2015-08-20 14:15:10

标签: c++ logging static singleton overloading

我仍在研究我的Logger,我喜欢Singleton的想法,但我的Logger派生了frd QDialog,因此我想在我第一次调用它时处理我的Parent QWidget * MainWindow指针:

class Logger : public QDialog {
  Q_OBJECT

private:  
  explicit Logger(QWidget* parent = 0);

public:
  static Logger& firstInstance(QWidget* parent = 0) {
       static Logger theInstance(parent);
       return theInstance;
  }
  static Logger& instance() {
       return theInstance;
  }
  //..
}

所以我会从我的MainWindow打电话给Logger::firstInstance(this);。和来自其他地方的Logger :: instance()。但我的编译器嘲笑:

  

错误:未在此范围内声明'theInstance':        返回实例;

第二个instance()方法中的

1 个答案:

答案 0 :(得分:1)

你实际上应该只从firstInstance拨打instance,因为你在firstInstance中有静态变量,它只会在第一次调用时被初始化,然后只返回已初始化的变量。

  static Logger& instance() {
       return firstInstance();
  }

但实际上,公共接口中的函数firstInstance是个坏主意,可能最好将其设为私有并声明MainWindow朋友类。