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

标签 c++ callback

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

相关文章:

c++ - 测量任何 Windows 可执行文件的内存使用情况和执行时间

c++ - 具有单继承的类的指针转换偏移

javascript - TinyMCE、save_callback 和 onSaveContent

javascript全局变量在下一次事件调用时返回到以前的状态

ruby-on-rails - 如何触发对象的销毁回调,该对象是自动删除该对象的连接模型的一部分?

c++ - 将 std::array 拆分为较小尺寸的 std::array 的元组

c# - 调试断言失败 : C++ exception in a C# application?

c++ - 发布不适用于不同的 PC

java - Flyway Java 回调

javascript - 仅在另一个脚本完成后才运行一个脚本的方法有哪些?