列出堆栈上的容器,并在其他函数中访问
list container on stack and accessed in other function
我对存储堆栈上分配的列表容器以及在其他函数中访问存储的列表容器感到困惑。请建议把所有东西都堆起来好吗?将所有内容放在堆上需要在析构函数中进行更仔细的删除操作。
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 1中,列表容器将在堆栈上分配。这个容器被插入到映射中。由于容器是在堆栈上分配的,在其他函数中访问存储在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.
}
}
STL容器遵循值语义而不是引用语义。所以它们实际上创建了元素的内部副本并返回这些元素的副本。因为已经创建了副本,所以应该没问题。
相关文章:
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- C++变量名(可以将 main 声明为变量,但对于其他函数名称则不然)
- 如何封装一个函数,以便它只能由同一类中的一个其他函数调用?
- 为什么 ADL 的运算符函数行为与其他函数不同?
- 将其他函数中的变量用于主函数C++
- 使用函数打开文件,然后让其他函数利用该文件?
- 如何创建一个函数来执行其中的其他函数
- 是否可以将多个结构作为一个数据包存储在一个函数中,然后传递给其他函数并在那里提取?
- 变量 z 无法从其他函数访问变量 x
- 将 libstdc++ 和其他函数组合到一个库中
- 休眠函数,但不阻止其他函数和代码
- 我的代码只会运行主函数,其他函数不会在C++中编译
- 传递多个参数的功能,该函数将类包含到其他函数
- 仅一个功能的链接错误.在同一类和CPP文件中具有相似签名的其他函数工作正常
- 如果从在其他函数中调用的函数引发异常会发生什么情况
- 为什么在其他函数中声明的函数不参与参数相关查找?
- C++ - 有没有办法只继承一次某些函数,而其他函数在多次继承中多次继承?
- 我应该删除来自其他函数或类方法的指针吗?
- Windows表单如何使用其他函数回调图表信息
- 关于函数调用,我的程序没有读取我的其他函数。为什么?