У меня есть такой код:
class MapIndex
{
private:
typedef std::map<std::string, MapIndex*> Container;
Container mapM;
public:
void add(std::list<std::string>& values)
{
if (values.empty()) // sanity check
return;
std::string s(*(values.begin()));
values.erase(values.begin());
if (values.empty())
return;
MapIndex *mi = mapM[s]; // <- question about this line
if (!mi)
mi = new MapIndex();
mi->add(values);
}
}
Основная проблема, с которой я столкнулся, заключается в том, будет ли выражение mapM [s] возвращать ссылку на указатель NULL, если новый элемент будет добавлен на карту?
Документы SGI говорят это: data_type & operator [] (const key_type & k)
Возвращает ссылку на объект, связанный с определенным ключом. Если карта еще не содержит такого объекта, оператор [] вставляет объект по умолчанию data_type ().
Итак, мой вопрос заключается в том, будет ли вставка объекта по умолчанию data_type () создать указатель NULL или он может создать недопустимый указатель, указывающий где-то в памяти?