Я бы хотел, чтобы мой класс был:
class NumberedString : public Object {
public:
String newName;
short nameID;
NumberedString(String &newName, short nameID) : newName(newName), nameID(nameID) {}
};
HashMap uniqueStrs;//For later.
Его экземпляр будет передан в HashMap
, который берет на себя право владения своим распределением кучи:
В HashMap.h (скажем):
virtual result Add(const Object& key, const Object& value);
Вот здесь я запутался. Я выделял String
в строке, которая называла Добавьте
:
uniqueStrs.Add(*(new String(L"XYX_say")), *pNewLoc);
HashMap
затем освободит эту память для меня, несмотря на то, что я принял только ссылку на нее. Может быть, я потерял десять лет до C
за новое тысячелетие, но я думал, что это невозможно?
Если это не так, тогда я мог бы написать что-то вроде:
~NumberedString() {
delete &newName;
}
для своего класса, но я бы никогда не догадался, если бы не увидел эту библиотеку HashMap :: RemoveAll ()
, выполняя аналогичные действия. В этом вопросе говорится, что это невозможно, но приходится полагаться на auto_ptr
и shared_ptr
, но моя «платформа поддерживает только STL (Standar d Библиотека шаблонов ( http://www.sgi.com/tech/stl/ )). »(из всей« Стандартной библиотеки C ++ »). Могли бы все ответы воздержаться от таких ссылок.
Спасибо.
ССЫЛКИ, подсказанные комментариями
Я не могу публиковать ссылки в качестве комментариев, поэтому просмотрите метод Добавить
и пример его предлагаемого использования: здесь И Бендж, Строка не является std :: string нет, извините.
ТАКЖЕ
Я знаю, что это может вызвать сбои при попытке удалить объекты стека, но я не понимаю, как HashMap
может утверждать, что может удалять объекты кучи. Я закодировал приведенный выше класс, чтобы попытаться воссоздать это поведение, но я не могу совершить подвиг, отсюда и вопрос.
В ответ на «Бесполезно»
@Useless: Возможно, нельзя передать в foo (int & bar)
переменную * pBar
, объявленную int pBar = new int (1);
, а затем foo
принимает владение с
foo(int &bar) {
int *__pBar = &bar;
delete __pBar;
}
? Я собирался попробовать, но начинаю проявлять осторожность, чтобы не верить слишком многому из того, что говорится в документации. Хотя он был сгенерирован из заголовка, который говорит
class _EXPORT_BASE_ HashMap :
public IMap,
public Object
{
virtual result Add(const Object& key, const Object& value);
//other stuff
};