私はクラスMessageクラスとクラスCacheを持っています。 メッセージ:: processMessage()fnにあります。私は別のクラスCacheRefのインスタンスを作成します(以下に示しません)。 次にCache :: cacheData(cacheRef)を呼び出します。std :: mapにローカル変数を格納する
ここで、Cacheクラスでは、CacheReferenceとしてキーを持つマップがあります。私はcacheData fnに渡したrefを保存します。この地図で
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
}
ここでコードは完全に正常に機能しています。しかし、私はこの懸念を持っています(確かではありません!!)、私はmapにいくつかのローカル変数を保存しています。これはprocessMessage()fnと同じようにすぐに存在しなくなります。終了します。だから、私はいくつかの無効なメモリにアクセスしています、それはちょうどこのコードが動作して運がいいですか?
これが間違っている場合は、この動作を達成する最も良い方法は何ですか? 私は自分のシステムでboostを持っていないので、何にもshared_ptrを使うことはできません。
あなたのコードはテンプレートパラメータを逃しています... 'std :: map m_dirs'は動作しません。 – etarion
マップm_dirsがどのようにテンプレート化されているかを表示できますか?最初のテンプレートパラメータはCacheRef&またはCacheRefですか? –
@etarion:paramsはそこにありましたが、HTMLとして扱われました。私は書式を修正しました。 –