Czy domyślna wartość nullptr jest mapą zachowania zdefiniowanego przez wskaźniki?

Poniższy kod wydaje się zawsze podążać za prawdziwą gałęzią.

#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;
}

Czy jest to zdefiniowane zachowanie dla niezainicjowanego wskaźnika do punktunullptrlub artefakt mojego kompilatora?

Jeśli nie, jak mogę zapewnić przenośność następującego kodu? Obecnie używam podobnej logiki, aby zwrócić poprawną instancję singleton dla alog 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];
}

Jednym rozwiązaniem byłobyużyj czegoś podobnego do tego gdy używasz specjalnej funkcji, podaj wartość domyślną podczas sprawdzania amap. Jednak rozumiem, że spowodowałoby to złożoność wyszukiwaniaO(n) zamiastO(1). Nie jest to zbyt duży problem w moim scenariuszu (zawsze byłoby tylko kilka dzienników), ale lepszym rozwiązaniem byłoby wymuszenie wskaźników typuLog* do odniesienianullptr domyślnie w ten sposób sprawdzanie wyszukiwaniaO(1) i przenośny w tym samym czasie. Czy to możliwe, a jeśli tak, to jak bym to zrobił?

questionAnswers(2)

yourAnswerToTheQuestion