У меня такой код:
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 docs говорят об этом: data_type & operator [] (const key_type & k) Возвращает ссылку на объект, связанный с определенным ключом. Если в карте нет такого объекта, оператор [] вставляет объект по умолчанию data_type().
Итак, мой вопрос заключается в том, будет ли вставка объекта по умолчанию data_type() создать указатель NULL или создать недопустимый указатель, указывающий где-нибудь в памяти?