c++ - 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 编辑器崩溃。
可能有一些更常见的方法来做我想做的事?或者一些可以防止它崩溃的验证?
请帮忙。
解决方案
不要手动调用析构函数。代替
SmallClass1->~ASmallClass();
SmallClass2->~ASmallClass();
与
delete SmallClass1;
SmallClass1 = nullptr;
或者,如果这些类型被虚幻以某种方式(可能)引用计数,则一无所获。
推荐阅读
- javascript - 粘性部分在滚动时会抖动(闪烁)
- ios - iOS B2B Distribution - Apple 将如何测试具有私有部署服务的移动应用程序?
- java - 在 Java 控制台中检测 Ctrl+C
- text - 用于在图表中可视化文本的库
- java - Android Places Autocomplete 如何检测每次建议更改的时间?
- pandas - 熊猫在条件下与 groupby 求和
- scala - 类构造函数中的非字段参数?
- mysql - MySQL 查询到 linq
- angular - 如何编写仅在“Promise.resolve()”上执行的异步方法装饰器?
- angular - Angular 2+ NgOnInit 为输入数组赋值,但抛出未定义的错误