为什么在创建对象之前调用Unity对象的Destructor?

亚历山大·蒂莫申科(Aleksey Timoshchenko)

我在Unity中有我的对象,这个对象有一个析构函数以及Awake方法

...
    private void Awake()
    {
        Debug.Log("AWAKE");
    }

    ~UnityHumanObject()
    {
        Debug.Log("DESTRUCTOR");
        if (stream != null)
        {
            stream_release(stream);
        }
    }
...

当我Run根据日志单击按钮时,我看到析构函数将打印他的日志消息3次,此后我看到Awake日志消息...接下来,如果我单击“停止”(再次单击“运行”按钮),则连该析构函数都看不到打个电话

因此,问题是-为什么当我首先单击运行按钮时,我会3次调用析构函数,其次为什么我停止Unity却实际上没有得到析构函数调用?

沉浸式

您可能希望实现一个接收器OnDestroy()参见https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnDestroy.html

我不了解Unity引擎如何工作的全部内容,但是我可以告诉您,从中衍生的内容UnityEngine.Object(包括MonoBehaviors)是一种混合类型,一部分是托管代码,一部分是非托管代码。编辑器也是一种神秘的野兽,因为它在编辑场景时会运行场景,但是会限制某些消息/调用,直到您处于“播放”模式(或向ExecuteInEditor属性注册)。

有了这些,如果您要扩展任何Unity类,就很难使用低级构造函数和析构函数来管理代码。简而言之,除非特定于Unity的功能不支持您所需的功能,否则请不要这样做。在您的情况下,使用OnDestroy()函数关闭流就足够了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么要在条带化充电之前创建客户对象?

来自分类Dev

可以在完全创建对象之前调用对象方法吗?

来自分类Java

为什么调用将statement.close()不立即释放由Statement对象创建的ResultSet对象?

来自分类Dev

为什么Java创建错误以将对象强制转换为可调用对象?

来自分类Dev

当传递可调用对象作为参数时,为什么g ++会抱怨“之前的无效声明符”?

来自分类Dev

为什么在调用glDrawArrays之前不需要绑定顶点缓冲区对象?

来自分类Dev

为什么在完全反序列化对象之前调用 Equals 方法?

来自分类Dev

为什么有时需要在将对象作为参数传递之前创建变量

来自分类Dev

为什么load事件被ProgressEvent对象调用?

来自分类Dev

为什么调用Java对象实例执行对象的方法

来自分类Dev

为什么我不能创建对象实例?

来自分类Dev

为什么允许创建多个QCoreApplication对象?

来自分类Dev

无法创建我的类的对象 - 为什么?

来自分类Dev

是否在构造函数被调用之前在堆上创建的Java对象?

来自分类Dev

是否在方法调用之前创建了所有对象?

来自分类Dev

为什么要使用立即调用的函数来创建新对象?

来自分类Java

为什么的getClass()调用时,我们创建内部类对象?

来自分类Dev

为什么可以通过创建对象在main方法中调用非静态方法?爪哇

来自分类Dev

为什么在动态对象创建期间Delphi会调用不正确的构造函数?

来自分类Dev

为什么我的函数每次调用都会创建一个新对象?

来自分类Dev

为什么在测试NSNull之前将其转换为对象?

来自分类Dev

Vue 3:为什么在更新对象之前获得相同的值

来自分类Dev

为什么之前的对象数组条目会被覆盖?

来自分类Java

当使用静态引用创建对象时,为什么在静态块之前执行实例块和默认构造函数?

来自分类Dev

为什么不为此代码调用Destructor

来自分类Dev

为什么不使用C ++调用Destructor?

来自分类Dev

在返回对象或直接返回之前创建对象

来自分类Dev

为什么我不能创建我创建的对象的数组?

来自分类Dev

为什么对象在Unity中卡在一起?

Related 相关文章

  1. 1

    为什么要在条带化充电之前创建客户对象?

  2. 2

    可以在完全创建对象之前调用对象方法吗?

  3. 3

    为什么调用将statement.close()不立即释放由Statement对象创建的ResultSet对象?

  4. 4

    为什么Java创建错误以将对象强制转换为可调用对象?

  5. 5

    当传递可调用对象作为参数时,为什么g ++会抱怨“之前的无效声明符”?

  6. 6

    为什么在调用glDrawArrays之前不需要绑定顶点缓冲区对象?

  7. 7

    为什么在完全反序列化对象之前调用 Equals 方法?

  8. 8

    为什么有时需要在将对象作为参数传递之前创建变量

  9. 9

    为什么load事件被ProgressEvent对象调用?

  10. 10

    为什么调用Java对象实例执行对象的方法

  11. 11

    为什么我不能创建对象实例?

  12. 12

    为什么允许创建多个QCoreApplication对象?

  13. 13

    无法创建我的类的对象 - 为什么?

  14. 14

    是否在构造函数被调用之前在堆上创建的Java对象?

  15. 15

    是否在方法调用之前创建了所有对象?

  16. 16

    为什么要使用立即调用的函数来创建新对象?

  17. 17

    为什么的getClass()调用时,我们创建内部类对象?

  18. 18

    为什么可以通过创建对象在main方法中调用非静态方法?爪哇

  19. 19

    为什么在动态对象创建期间Delphi会调用不正确的构造函数?

  20. 20

    为什么我的函数每次调用都会创建一个新对象?

  21. 21

    为什么在测试NSNull之前将其转换为对象?

  22. 22

    Vue 3:为什么在更新对象之前获得相同的值

  23. 23

    为什么之前的对象数组条目会被覆盖?

  24. 24

    当使用静态引用创建对象时,为什么在静态块之前执行实例块和默认构造函数?

  25. 25

    为什么不为此代码调用Destructor

  26. 26

    为什么不使用C ++调用Destructor?

  27. 27

    在返回对象或直接返回之前创建对象

  28. 28

    为什么我不能创建我创建的对象的数组?

  29. 29

    为什么对象在Unity中卡在一起?

热门标签

归档