C ++ Singleton конструктор не вызывается - PullRequest
0 голосов
/ 10 ноября 2018

Уважаемые StackOverflowers,

Я создал одноэлементный класс с именем Log, но он не вызывает конструктор. Класс используется для печати последовательных команд в зависимости от m_LogLevel. Я хочу, чтобы конструктор вызывался один раз, когда getInstance() вызывается впервые. По какой-то причине конструктор, кажется, никогда не вызывается, что я делаю не так?

Заранее спасибо!

Log.h:

class Log {

  private:
    int m_LogLevel = LOGLEVEL;
    static Log* instance;
    Log();
    ~Log();

  public:
    static Log* getInstance();
    void debug(String);
};

Log.cpp:

Log* Log::instance = nullptr;

Log::Log() {
  DEBUG_PRINT("Log level: ");
  DEBUG_PRINTLN(m_LogLevel);
}

Log::~Log() {
}

Log* Log::getInstance() {
    if (instance == 0) {
        instance = new Log();
    }
    return instance;
}

void Log::debug(String message) {
  if(m_LogLevel >= LogLevelDebug) {
  DEBUG_PRINT("[DEBUG]: ");
  DEBUG_PRINTLN(message);
}

}

main.cpp:

#define DEBUG_PRINT(x)  Serial.print (x)
#define DEBUG_PRINTLN(x)  Serial.println (x)
#define LOGLEVEL 3

#include <Arduino.h>
#include "Log.h"

Log* pLog = Log::getInstance();

void setup() {
  Serial.begin(115200);
  pLog->debug("Hello world");
}

void loop() {
}
...