我正在实地学习回调函数。感谢你们中的一些人,我学到了很多东西。 我正在使用必须调用回调函数的对象的 C++ 实例:单个函数,而不是 C++ 方法,如下所示:
MyObj *obj = new MyObj();
obj->callback(function);
//callback
void funtion()
{
int i = 10;
...
}
我的疑问如下: 如果 MyObj 的不同实例调用回调,它们是否会使用自己的局部变量创建不同的“函数”“实例”?换句话说,对于每个对象调用,内存中是否存在不同的“i = 10”,或者存在共享相同“i”的风险?
谢谢
最佳答案
没有函数的“实例”这样的东西。函数的所有局部变量,无论是成员变量还是独立变量,都放在自动存储区(也称为“堆栈上”)。这些变量保留在自动存储区中,直到不再需要它们,因为它们的作用域已经结束,然后被丢弃。
并发运行您的函数的每个线程都将拥有自己的局部变量拷贝 - 在您的情况下,每个线程都将拥有自己的 i
。
请注意,如果您想在多个调用之间共享一个变量,C++ 允许您通过在函数内标记变量 static
来实现:
void funtion()
{
static int i = 10;
...
}
现在 function
的所有调用都共享同一个变量 i
。此外,i
的值将在多次调用中保持不变:例如,如果一个调用在退出前将 i
设置为 20,然后另一个调用进入函数,则值i
将保持 20,而不是 10,因为 i
的初始化在程序运行时只执行一次。
关于c++ - 从 C++ 对象调用的回调函数 "C style",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27048483/