请教一下关于C++注册非DYNAMIC_DELEGATE回调的问题 #1486
Unanswered
watsonsong
asked this question in
Q&A
Replies: 3 comments
|
目前提供的所有c++调用脚本的方式传闭包都会持有闭包的引用不会释放,这是最最基本的东西。 |
0 replies
|
测试了一下发现我描述有问题,产生问题的原因还和FJsObject有关系。在使用UMG的ListView的时候为了方便,包装了一个统一的UObject去持有一个FJsObject。这样在AddItem的时候能直接Add一个纯粹的JS对象进去。 大概代码如下。 然后崩溃发生在这个std::function被Invoke的时候,FJsObject拷贝的过程中。 想求教一下是不是使用和理解上有什么问题,导致了这个崩溃的产生。 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
我看文档中到注册非DYNAMIC_DELEGATE有几种方法,包括:
使用std::function注册的时候,发现如果构造闭包传递给C++,然后通过AddLambda的方式注册给一个非DYNAMIC的回调。延迟一段时间后再触发回调的话,比较容易产生崩溃;感觉是C++持有的std::function对象并不会持有这个闭包的生命周期。
Unreal中有很多非DYNAMIC的事件(特别是GAS中),它们通过各种AbilityAsync让蓝图能调用。因此想非DYNAMIC的回调能否安全的通过C++绑定封装给JS。
否则的话得为这些每个回调再封装一个DYNAMIC_DELEGATE,类似ULatentActionState这样再来做一个代理中转,总感觉会比较麻烦而且有损性能。
不知道能否JS传递一个闭包给到C++,然后给注册给一个非Dynamic的Delegate,能持有或者不持有(AddWeak)生命周期的方法?
All reactions