UE4 C++ 如何正确检查未初始化指针以避免触发编译报错?
问题原因
这个报错和你使用的指针校验逻辑无关,是C++局部变量的基础规则导致的:
- 函数内声明的基础类型(包括指针)局部变量不会被自动初始化为
nullptr或者0,会保留栈内存上的随机垃圾值 - 编译器检测到你在读取未赋值的局部变量的值,不管你是拿来判空还是做其他操作,都会触发这个编译报错,避免你用到非法的随机值
解决方法
只需要在声明指针的时候主动初始化即可,UE项目里统一初始化为nullptr就可以:
// 声明时主动初始化 Ainfantry_actor* test_pointer = nullptr; // 之后再做校验就不会触发编译报错了 // UE推荐优先用IsValid,因为它除了判空还会校验UObject对象是否被标记为待销毁 if (IsValid(test_pointer)) { // 合法逻辑 }
补充说明:如果是类的成员变量指针,UE的UObject类成员会默认自动初始化为nullptr,不需要额外手动初始化,只有栈上的局部指针变量需要手动初始化。
内容的提问来源于stack exchange,提问作者sirmaci
相关产品推荐
相关产品推荐

