我想知道线程1是否通过传递的对象'obj-> fun()'调用类函数,并且该对象在后台被其他线程(例如线程2)删除,线程2对线程1执行函数的处理。
示例:
datatype ('a, 'b) either = Left of 'a | Right of 'b
fun nth (xs, n) =
let fun go ([], _) = Left n
| go (x::_, 0) = Right x
| go (_::ys, i) = ...
in if n < 0 then Left n else go (xs, n)
end
val example_1 = nth ([2,3,5], 5) (* gives: Left 5 *)
val example_2 = nth ([2,3,5], ~1) (* gives: Left ~1 *)
val example_3 = nth ([2,3,5], 2) (* gives: Right 5 *)
问题:在上述情况下,A-> functionA调用函数functionA。如果函数正在执行,自对象A调用后删除A对函数执行有什么影响? functionA无法处理共享数据吗?
答案 0 :(得分:2)
如果函数正在执行,自对象A调用后删除A对函数执行有什么影响?
如果执行函数以任何方式使用this
,则影响将是不确定的行为。通过使用this
是指访问任何数据成员或基础子对象,调用任何成员函数,间接访问this
或将this
传递给将执行任何上述操作的某个函数。
设置条件变量后,您的functionA
似乎没有以任何方式使用this
,因此,假设条件变量访问本身已正确同步,则不会有任何影响。
但是,这样做不是一个好主意,因为在functionA
的定义中看不到没有成员可以访问。对于程序员来说,在以后更改功能时很容易不遵循该要求。
据我所知,这种情况类似于delete this;
的情况,该情况被认为符合标准,但可能存在危险:Is delete this allowed?