我有以下功能:在IsValid(Object)返回true後,爲什麼不能安全地使用Object?
void AddActor(AActor* Actor)
{
if (!IsValid(Actor)) { return; }
if (Actor->IsA(ACertainActor::StaticClass()))
{
//...
}
}
它得到通過一些有效的和一些無效Actor
-pointers(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
應該可用。
這不是它的工作原理嗎?
是否有任何其他方式來檢查指針是否指向可以使用的有效對象?
在調用'IsValid'之前,文檔沒有清楚地解釋需求。但可以推測,你的代碼並不符合他們的要求。我推測指針必須是nullptr,指向一個有效的'AActor'或指向一個無效的'AActor'(等待中止)。 –