回调功能" C风格"从C ++对象调用

时间:2014-11-20 20:03:56

标签: c++ callback

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

MyObj *obj = new MyObj();

obj->callback(function);

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

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

谢谢

1 个答案:

答案 0 :(得分:1)

没有"实例"一个功能。函数,成员或独立的所有局部变量都放在自动存储区域中(也称为#34;在堆栈上#34;)。这些变量保留在自动存储区域中,直到它们不再需要,因为它们的范围已经结束,然后被丢弃。

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

请注意,如果要在多个调用之间共享变量,C ++允许您通过在函数static内标记变量来实现此目的:

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

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