2014-11-20 62 views
1

我在字段上了解回调函数。感谢你们中的一些人,我学到了很多。 我使用的是C++的对象,必须调用回调函数的例子:单一功能,而不是C++方法如下:从C++对象调用的回调函数“C风格”

MyObj *obj = new MyObj(); 

obj->callback(function); 

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

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

谢谢

回答

1

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

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

请注意,如果你想分享多次调用之间的变量,C++,您可以做到这一点通过标记功能static里面的变量:

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

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

+0

是的,我知道静态和可变变量。对于我的范围,它需要每个使用不同对象的calllback调用不共享相同的变量,换句话说,obj1-> callback也有自己的i变量和obj2-> callback(在这种情况下,例如,I可以自由地更改我的变量,不用担心每个obj)。再次感谢你。 – Chris 2014-11-20 20:18:01