为什么在 IsValid(Object) 返回 true 后不能安全地使用 Object?
Why isn't Object safe to use after IsValid(Object) returned true?
我有以下函数:
void AddActor(AActor* Actor)
{
if (!IsValid(Actor)) { return; }
if (Actor->IsA(ACertainActor::StaticClass()))
{
//...
}
}
它传递了一些有效和一些无效的Actor
指针(等待销毁或已被销毁的Actors
(。
根据代码文档IsValid()
返回true
对象是否可用:
/**
* Test validity of object
*
* @param Test The object to test
* @return Return true if the object is usable: non-null and not pending kill
*/
但它在引发访问冲突if (Actor->IsA(ACertainActor::StaticClass()))
崩溃:
Exception thrown at 0x00007FF868B56895 (UE4Editor-CoreUObject.dll) in UE4Editor.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.
我希望IsValid(Object)
检查Object
是否nullptr
,引擎知道Object
,如果确实检查它是否等待销毁。因此,在IsValid(Object)
返回 true 后,Object
应该可用。
这不是它的工作原理吗?
有没有其他方法可以检查指针是否指向可以使用的有效对象?
好吧,从你的例外:
UE4Editor.exe中0x00007FF868B56895(UE4Editor-CoreUObject.dll(引发异常: 0xC0000005:访问冲突读取位置0xFFFFFFFFFFFFFFFF。
in 明确指出此指针不是 nullptr,它具有价值0xFFFFFFFFFFFFFFFF
。所以IsValid
按照文档中写的那样工作:
如果对象可用,则返回 true:非 null 且不挂起 kill
您应该初始化指向 nullptr
的指针。
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么我的for循环不能正确获取argv
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 为什么我不能在 FOR LOOP 中使用 i/10,C++?
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 为什么模板类中的对象不能返回值
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 数组长度,为什么从命令行获取时不能使用它?
- Windows/Cygwin - 不能使用 pybind11 - 犯错误
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 为什么我不能将 rand() 与数组的大小一起使用?
- 为什么虚函数不能是静态的和全局的?
- 为什么我不能在 while 循环中创建线程?
- 为什么这个音频包络不能通过开关的情况?
- 为什么在 IsValid(Object) 返回 true 后不能安全地使用 Object?