puerts icon indicating copy to clipboard operation
puerts copied to clipboard

[UE] suggestion TS继承CPP中定义的一个UObject类,在TS中通过NewObject创建的实例,其CPP部分会被GC析构

Open wangyhbupt opened this issue 3 years ago • 7 comments

detail | 详细描述

CPP中定义一个UObject类 image

在TS中继承上述CPP类 image

在TS中创建一个实例: image

之后访问这个实例的成员变量 会发现这个实例的CPP部分会被GC给析构掉,导致访问int_in_cpp会报错, 而访问int_in_ts是正常的。

对于此种情况,怎样才能保证cpp中的实例不被gc所销毁? 我必须自己去控制CPP中的实例的生命周期吗? 比如:对其调用AddToRoot 或者将其放入一个TArray中?

wangyhbupt avatar Jul 11 '22 06:07 wangyhbupt

makeUClass已经是过时方式了,不推荐使用。

chexiongsheng avatar Jul 11 '22 06:07 chexiongsheng

makeUClass得到的类,创建的对象应该由引擎持有

chexiongsheng avatar Jul 11 '22 06:07 chexiongsheng

引用关系是这里描述的第二种: https://github.com/Tencent/puerts/blob/master/doc/unreal/mixin.md#%E5%89%8D%E7%BD%AE%E7%9F%A5%E8%AF%86

chexiongsheng avatar Jul 11 '22 06:07 chexiongsheng

不行被自动CG,你再构建之后,AddToRoot(),销毁的时候,自动RemoveFromRoot()即可。TS里面,你可以手动管理这个状态

VegetableWithChicken avatar Jul 12 '22 03:07 VegetableWithChicken

引用关系是这里描述的第二种: https://github.com/Tencent/puerts/blob/master/doc/unreal/mixin.md#%E5%89%8D%E7%BD%AE%E7%9F%A5%E8%AF%86

image 我尝试使用Mixin 有几个问题,麻烦大佬解答一下:

  1. 在ts中创建实例的时候,应该用new 还是 NewObject? 我两种都试了,貌似没有什么区别
  2. ts中创建实例,TS中定义的Constructor不会被调用到,这个问题如何解决?
  3. 对一个cpp基类,调用两次mixin的时候,第二次调用会报错,请问如何解决?

image image

wangyhbupt avatar Jul 18 '22 03:07 wangyhbupt

您好,我一般不常用邮箱,有重要邮件,请QQ我下,谢谢!

VegetableWithChicken avatar Jul 18 '22 03:07 VegetableWithChicken

我又尝试,对mixin的第三个参数,将inherit置为true 这样 两个子类的mixin调用都ok了。并且各种测试用例都正常 但是,当GC发生后,客户端会立即崩溃 崩溃栈如下: image

请问这种情况可能是什么原因导致的?

wangyhbupt avatar Aug 01 '22 08:08 wangyhbupt

makeUClass已经是过时方式了,不推荐使用。

makeUClass已经是过时方式了,现在使用什么方式?puerts_unreal_demo里面也是用的makeUClass 我有个TS类继承自class MyObject extends UE.Object,我该怎么创建MyObject实例 UE.NewObject(makeUClass(MyObject), this, null, 200) 这种方式能创建实例但是Outer和Flag都没有正确传到C++的NewObject函数 UE.NewObject(MyObject.StaticClass(), this, null, 200) 其他参数正确传过去了,但是Class传过去的是UObject

9000miles avatar Jan 31 '23 03:01 9000miles

您好,我一般不常用邮箱,有重要邮件,请QQ我下,谢谢!

VegetableWithChicken avatar Jan 31 '23 03:01 VegetableWithChicken