gpt4 book ai didi

c++ - 从 C++ 对象调用的回调函数 "C style"

转载 作者:太空宇宙 更新时间:2023-11-04 11:24:52 25 4
gpt4 key购买 nike

我正在实地学习回调函数。感谢你们中的一些人,我学到了很多东西。我正在使用必须调用回调函数的对象的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com