首页 > 解决方案 > UE4中如何正确使用多个析构函数

问题描述

在我的游戏中,我正在创建一些大类,它存储对较小类的引用,这些小类也存储一些引用。在游戏过程中,我需要通过销毁它并创建一个新的来重新创建这个包含所有依赖项的大类。

它的创作是这样的:

ABigClass::ABigClass()
{
    UE_LOG(LogTemp, Warning, TEXT("BigClass created"));
    SmallClass1 = NewObject<ASmallClass>();
    SmallClass2 = NewObject<ASmallClass>();
    ......
}

它有效。现在我想通过调用某个函数来销毁并重新创建它

BigClass->~ABigClass();
BigClass= NewObject<ABigClass>();

它破坏了 BigClass 并用新的小类创建了新的类,问题是,旧的小类仍在内存中,我可以通过记录它们的析构函数来看到它。

所以我尝试为 Big Class 制作这样的析构函数

ABigClass::~ABigClass()
{
    SmallClass1->~ASmallClass();
    SmallClass2->~ASmallClass();
    ......
    UE_LOG(LogTemp, Warning, TEXT("BigClass destroyed"));
}

SmallClass 继承自其他类,它有自己的构造函数和析构函数,但我没有在任何地方调用它。

有时它可以工作,但主要是在编译代码或游戏开始/停止时导致 UE 编辑器崩溃。

可能有一些更常见的方法来做我想做的事?或者一些可以防止它崩溃的验证?

请帮忙。

标签: c++unreal-engine4

解决方案


不要手动调用析构函数。代替

SmallClass1->~ASmallClass();
SmallClass2->~ASmallClass();

delete SmallClass1;
SmallClass1 = nullptr;

或者,如果这些类型被虚幻以某种方式(可能)引用计数,则一无所获。


推荐阅读