UE4+C++开发-(十六)C++ 中关键字空指针常量nullptr,UE确保未绑定的对象指针有明确的空状态
·
在 C++ 中,nullptr 是一个关键字,表示空指针常量,用于明确表示指针不指向任何有效的内存地址。它在 C++11 标准中被引入,用来替代传统的 NULL 宏,解决了 NULL 可能带来的二义性问题。
主要特点与优势
-
类型安全
nullptr有自己的类型(std::nullptr_t),编译器能更准确地进行类型检查,避免了NULL(本质是0)可能导致的函数重载歧义:cpp
运行
void func(int); // 接受整数 void func(char*); // 接受指针 func(NULL); // 歧义:调用哪个?(C++中可能匹配到int版本) func(nullptr); // 无歧义:明确调用char*版本 -
明确表示空指针意图
相比NULL或0,nullptr更清晰地表达 "这是一个空指针" 的语义,提高代码可读性:cpp
运行
int* ptr = nullptr; // 明确表示 ptr 是一个空指针 -
兼容旧代码
nullptr可以隐式转换为任何指针类型(包括类成员指针),但不能转换为整数类型(除非显式强制转换),既保持了兼容性又增强了安全性。
在 Unreal Engine 中的常见用法
在 UE 代码中,nullptr 广泛用于初始化指针成员变量,尤其是在类的构造函数中,确保未绑定的对象指针有明确的空状态:
cpp
运行
ULoginWidget::ULoginWidget(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
// 初始化UI组件指针为空
LoginButton = nullptr;
UsernameTextBox = nullptr;
}
后续在绑定实际对象(如通过 BindWidget() 关联 UMG 组件)后,这些指针会指向有效对象,避免了未初始化指针(野指针)可能导致的崩溃。
与 NULL 的区别
NULL是宏定义(通常为0或(void*)0),在指针语境中可能被编译器当作整数处理,存在类型隐患。nullptr是类型安全的空指针常量,仅用于指针场景,不会被误解为整数。
在现代 C++(包括 UE 开发)中,推荐始终使用 nullptr 表示空指针,而非 NULL 或 0。
更多推荐


所有评论(0)