Является ли значение по умолчанию для nullptr в карте указателей определенного поведения?

Следующий код, кажется, всегда следует за истинной ветвью.

#include <map>
#include <iostream>

class TestClass {
  // implementation 
}

int main() {
  std::map<int, TestClass*> TestMap;
  if (TestMap[203] == nullptr) {
    std::cout << "true";
  } else {
    std::cout << "false";
  }
  return 0;
}

Определено ли поведение неинициализированного указателя, указывающего наnullptrили артефакт моего компилятора?

Если нет, как я могу обеспечить переносимость следующего кода? В настоящее время я использую подобную логику, чтобы вернуть правильный экземпляр синглтона дляlog file:

#include <string>
#include <map>    

class Log {
  public:
    static Log* get_instance(std::string path);
  protected:
    Log(std::string path) : path(path), log(path) {};
    std::string path;
    std::ostream log;
  private:
    static std::map<std::string, Log*> instances;
};

std::map<std::string, Log*> Log::instances = std::map<std::string, Log*>();

Log* Log::get_instance(std::string path) {
  if (instances[path] == nullptr) {
    instances[path] = new Log(path);
  }
  return instances[path];
}

Одним из решений было быиспользовать что-то похожее на это где вы используете специальную функцию, предоставьте значение по умолчанию при проверкеmap, Тем не менее, я понимаю, что это приведет к сложности поискаO(n) вместоO(1), Это не слишком большая проблема в моем сценарии (было бы только несколько журналов), но лучшее решение было бы каким-то образом заставить указатели типаLog* ссылатьсяnullptr по умолчанию, делая проверку поискаO(1) и портативный одновременно. Возможно ли это, и если да, то как бы я это сделал?

Ответы на вопрос(2)

Ваш ответ на вопрос