我对存储分配在堆栈上的列表容器以及在其他一些函数中访问存储的列表容器感到困惑。请建议将所有内容都放在堆上是否更好?将所有内容放在堆上将需要在析构函数中进行更仔细的删除操作。
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中,列表容器将被分配到栈上。这个容器被插入到地图中。由于容器是在堆栈上分配的,在其他函数中访问存储在 map 中的列表容器是否安全?
例如:
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.
}
}
提前致谢。