我们是否可以安全地从套接字参数的回调中分配对象引用

Can we safely assign an object reference from a socket argument's callback

本文关键字:参数 回调 对象引用 分配 套接字 是否 安全 我们      更新时间:2023-09-26

我想知道我是否通过将我从回调接收的对象的引用分配给另一个变量来做一些危险的事情,是否有可能"丢失"这些数据?

一个非常简单的示例,发生在服务器端,来自套接字的回调:

var Users [];
socket.on('receive-user', function(User) {
  Users.push(User);
});

在这里,我将变量User的引用推送到我的数组Users中,但我无法解释在作用域结束时User的原始变量是什么,那么,它危险吗?此引用是否有可能在下一次回调时更改?

当我从数据库获取模型时,我也会这样做,甚至将套接字本身存储到User变量中,但我真的想知道这是否不是一个大错误!

完全没问题。只要仍有内容引用User对象(在本例中为 Users 数组),它就不会被垃圾回收。

这通常是垃圾回收语言的工作方式。这是你在垃圾回收语言中看不到malloc等人的原因之一——基本上所有的变量声明都是malloc'ed的。