Как я могу ассигновать память для него и ввести GraphObject?
Это не хочет быть указателем вообще; просто сделайте саму карту, член класса и выделения памяти произойдет автоматически.
Правильно вставка объекта довольно трудна, так как вы храните указатели там также. Если бы это не должен быть указатель, то хранить объекты сделало бы вашу жизнь намного легче. Если это действительно должен быть указатель (например, потому что , GraphObject
является полиморфным базовым классом), я рекомендовал бы хранить интеллектуальные указатели: станд.:: unique_ptr
или станд.:: tr1:: shared_ptr
или повышение:: shared_ptr
, если вы застреваете в прошлом.
Если вы действительно, действительно должен использовать сырые указатели по некоторой безумной причине, то самое близкое, которое можно получить к безопасной от исключения вставке, вероятно:
GraphObject * object = new Whatever(...);
try {
the_Map[key].insert(object);
} catch(...) {
delete object;
throw;
}
или если вы не заботитесь о возможности утечек памяти на неудаче вставки:
the_Map[key].insert(new Whatever(...));
Также не забывайте удалять каждый объект, когда вы удалите его; этого не произойдет автоматически.
Мне действительно нужен указатель на карту.
Нет вы не делаете. Но если вы действительно будете полагать, что делаете и хотите проигнорировать общий совет не к, тогда вам будет нужна фактическая карта, чтобы указать на. Я рекомендовал бы, чтобы вы сделали эту карту членом класса, так, чтобы его жизнью управляли автоматически.
Если вы действительно хотите сделать жизнь трудной для того, кто бы ни поддерживает код, то я предполагаю, что вы могли ассигновать один с , новым
. В этом случае не забудьте удалять его, когда вы закончите с ним; вероятно, в деструкторе класса. И если вы делаете это, помните Правило три и осуществите или удалите конструктора копии и оператор присваивания копии, так как реализации по умолчанию сделают неправильную вещь.