从C ++对象调用的回调函数“ C样式”

克里斯

我正在学习有关回调函数的领域。感谢你们中的一些,我学到了很多东西。我正在使用必须调用回调函数的对象的C ++实例:单个函数,而不是如下的C ++方法:

MyObj *obj = new MyObj();

obj->callback(function);

//callback 
void funtion() 
{
  int i = 10;
  ...
}

我的疑问如下:如果MyObj的不同实例调用了回调,它们是否将使用自己的局部变量创建“函数”的不同“实例”?换句话说,对于每个对象调用,内存中是否存在不同的“ i = 10”,否则存在共享相同“ i”的风险?

谢谢

谢尔盖·卡里尼琴科(Sergey Kalinichenko)

没有功能的“实例”之类的东西。函数的所有局部变量(成员或独立的)都放置在自动存储区域(也称为“堆栈中”)。这些变量将保留在自动存储区域中,直到因为它们的作用域已不再使用而不再需要它们,然后将其丢弃。

同时运行您的函数的每个线程都将拥有自己的局部变量副本-在您的情况下,每个线程都将拥有自己的副本i

请注意,如果要在多个调用之间共享变量,C ++可以通过在函数内部标记变量来做到这一点static

void funtion() 
{
    static int i = 10;
    ...
}

现在,所有的调用都function共享同一个变量i此外,iwill的值将在多次调用中保持不变:例如,如果一个调用i在退出之前设置为20,然后另一个调用进入该函数,则value的值i将保持为20,而不是10,因为iin的初始化仅在一次中执行一次。程序的运行时间。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章