У меня есть сообщение класса и кеш класса. В сообщении :: processMessage() fn. Я создаю экземпляр другого класса CacheRef (не показано ниже.) , затем я вызываю Cache :: cacheData (cacheRef)Сохранение локальной переменной в std :: map
Теперь, в классе Cache, у меня есть карта с ключом CacheReference. Я сохраняю ref, который я передал cacheData fn. на этой карте.
class Message
{
private:
Key m_key;
public:
void processMessage(int a, int b, Cache *pCache)
{
CacheRef ref(a, b, m_key); //CacheRef is a class defined in same file
//some char *data - do processing an dfill it!!
pCache->cacheData(ref, data);
}
}
class Cache
{
public:
void cacheData(CacheRef &ref, const char* data)
{
CacheDir *dir;
std::map<<CacheRef, CacheDir*>::iterator it = m_dirs.find(ref);
if(it == m_dirs.end())
{
dir = new CacheDir();
m_dirs.insert(ref, dir);
}
}
std::map<CacheRef, CacheDir*> m_dirs; //CacheDir is some class defined in the same file
}
Теперь код работает абсолютно нормально. Но у меня есть эта проблема (не уверен !!), что я храню некоторую локальную переменную на карте, которая перестает существовать, как только processMessage() fn. выходы. Итак, могу ли я получить доступ к некоей недействительной памяти, просто удачи, что этот код работает.
Если это не так, то каков наилучший способ достичь такого поведения? У меня нет поддержки в моей системе, поэтому я не могу использовать shared_ptr для чего-либо.
Ваш код пропускает параметры шаблона ... 'std :: map m_dirs' не будет работать. – etarion
Можете ли вы показать, как шаблон m_dirs templatized? Является ли первый шаблон параметром CacheRef или CacheRef? –
@etarion: Параметры были там, но рассматривались как HTML. Я исправил форматирование. –