Я хотел бы, чтобы мой класс был:
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
в строке, которая называлась Add
:
uniqueStrs.Add(*(new String(L"XYX_say")), *pNewLoc);
. Затем HashMap
освободил бы эту память для меня, несмотря на то, что я принял только ссылку на нее.Может быть, я потерял десятилетие до C
из-за нового тысячелетия, но я думал, что это невозможно?
Если нет, тогда я смогу написать что-то вроде:
~NumberedString() {
delete &newName;
}
для моегокласс, но я бы никогда не догадался, если бы не увидел, что эта библиотека HashMap::RemoveAll()
делает эквивалент. В этом вопросе говорится, что это невозможно, но возвращается к зависимости от auto_ptr
и shared_ptr
, но моя «платформа поддерживает только STL (Стандартная библиотека шаблонов (http://www.sgi.com/tech/stl/))." (из всего»)Стандартная библиотека C ++ "). Могли бы все ответы воздержаться от таких ссылок.
Спасибо.
ССЫЛКИ, подсказанные комментариями
Не могуопубликуйте ссылки как комментарии, поэтому, пожалуйста, смотрите метод Add
и пример его использования: здесь И Benj, String не является std :: string no, извините.
ТАКЖЕ
Я знаю, что это может привести к сбоям при попытке удалить объекты стека, но я не понимаю, как HashMap
может претендовать на возможность удаления объектов кучи. У меня естьзакодировал вышеупомянутый класс, чтобы попытаться воссоздать это поведение, но я не могу совершить подвиг, поэтому возникает вопрос.
В ответ на «Бесполезно»
@ Useless: Mightnнельзя ли передать 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
};