Я реализую собственный класс карты, аналогичный классу из std, однако у меня есть одна проблема. На их карте, когда вы это делаете (например):
map<string, SomeObject*> container;
SomeObject* object = container["this doesn't exist"];
в объекте отладчика - 0x0000000, поэтому недопустимые значения из карты всегда равны нулю. Однако на моей карте недопустимые значения похожи на неинициализированные указатели - они имеют недопустимое значение, например 0xcdcdcdcd, однако в режиме выпуска это что-то еще, поэтому я не могу полагаться на проверку
if(object == 0xcdcdcdcd)
Итак, я хотел бы иметь возможность сделать это:
MyMap<string, SomeObject*> container;
SomeObject* object = container["this doesn't exist"]; //and for this to definetely be nullptr
так что я могу тогда сделать
if(object == nullptr)
DoSomething();
У меня есть функция bool ContainsKey (KeyType key);, но она включает цикл for. Есть ли способ обеспечить то, что я хочу, во время инициализации для карты, или мне нужно сделать пользовательский PointerWrapper, который будет содержать указатель на SomeObject, для которого установлено значение nullptr в конструкторе PointerWrapper? У меня было трудно понять, что происходит в заголовках std, они содержат огромное количество макросов и определений типов.
std::map<>
значение-инициализирует свои значения - см. этот вопрос / ответ для стандартной версии. - person ildjarn   schedule 30.03.2013