【发布时间】:2021-08-01 19:15:45
【问题描述】:
如果我创建一个指针并想检查它而不出错,我该怎么做?一些方法是:
Ainfantry_actor* test_pointer;
if (IsValid(test_pointer)) { ... }
if (test_pointer!= nullptr) { ... }
if (test_pointer) { ... }
当我使用其中之一时,得到这个:“未初始化的局部变量'test_pointer'”
提前致谢。
【问题讨论】:
-
你不能。编译器可以做出很好的猜测,但即使它是正确的,您的程序也无法获得该信息。
-
未初始化变量的内容是indeterminate,因此您可能对其值应用的任何测试都可能完全是偶然成功的。因此这是不可能的。事实上,大多数这样的测试无论如何都会导致未定义的行为。所以想出一个不涉及这个的更好的算法。
-
您可以使用
Ainfantry_actor* test_pointer = nullptr;。因为您没有初始化变量,所以它会获得一个“随机”值(如果您在visual-studio 中使用调试器test_pointer将获得值0xcccccccc)。 -
@Sebphil 建议我可以接受,谢谢。
-
以任何方式读取未初始化的内存都是c++中的ub。要在虚幻的层面上回答您的问题,使用 IsValid 可能会在某些时候绊倒您。使用
test_pointer!= nullptr或简单的test_pointer足以测试指针是否为nullptr。您可以使用 uobjects 更进一步,并测试它们是否正在等待杀死。然而,这是非常罕见的,当它是你可能会使用内置该功能的weakptrs。
标签: c++ unreal-engine4