スタックに割り当てられたリスト コンテナーの格納と、格納されたリスト コンテナーへの他の関数へのアクセスについて混乱しています。すべてをヒープに置く方が良いかどうか提案してください。すべてをヒープに置くには、デストラクタでより慎重な削除操作が必要になります。
typedef (*func)(); // Callback type
class SignalHandler {
...
...
void Register(int, func);
void UnRegister(int, func);
public:
map<int, list<func> > mCallbackMap;
}
void SignalHandler::Register(int signal, func f){
....
list<func> l; // A new list
l.push_back(f); // insert f to the list
mCallbackMap.insert(make_pair(signal, l)); // Insert in map
....
....
....
}
関数 Register, list l では、リスト コンテナーがスタックに割り当てられます。このコンテナーはマップに挿入されます。コンテナーがスタックに割り当てられているため、マップに格納されているリスト コンテナーに他の関数で安全にアクセスできますか?
例えば:
void SignalHandler::UnRegister(int signal, func f) {
....
....
it = mCallbackMap.find(signal);
if (it != mCallbackMap.end()) {
list<func> *l = &(it->second); // Is it OK to access it here? I am confused.
}
}
前もって感謝します。