使用 nullptr 检查空指针最安全,推荐 if (ptr == nullptr) 或 if (!ptr),避免 NULL 或 0;优先采用智能指针如 unique_ptr,其自动管理空状态并支持布尔判断,解引用前必须检查以防止段错误。

在C++中,检查指针是否为空是防止程序崩溃的重要步骤。空指针(null pointer)指的是没有指向有效内存地址的指针,直接解引用会导致未定义行为,常见于段错误(segmentation fault)。以下是常用的空指针检查方法。
使用 nullptr 进行比较
C++11 引入了 nullptr 作为空指针的推荐表示方式。检查指针是否为空,最清晰安全的方法是与 nullptr 比较。
示例:int* ptr = nullptr;if (ptr == nullptr) { // 指针为空,不进行解引用 } // 或者更常见的写法: if (!ptr) { // 等价于 ptr == nullptr }
避免使用 NULL 或 0
虽然传统上使用 NULL(通常定义为 0 或 ((void*)0))或直接写 0 来表示空指针,但它们本质上是整数常量,在函数重载等场景下可能引发类型歧义。推荐统一使用 nullptr 提高代码清晰度和安全性。
不推荐写法:if (ptr == NULL) { ... }
if (ptr == 0) { ... }
智能指针自动管理空状态
现代C++推荐使用智能指针(如 std::unique_ptr 和 std::shared_ptr)代替原始指针。这些类重载了布尔转换操作符,可直接用于条件判断。
立即学习“C++免费学习笔记(深入)”;
示例:std::unique_ptr ptr;
if (!ptr) {
// 指针未持有对象
}
// 或者显式比较
if (ptr == nullptr) {
// 同样有效
}
解引用前务必检查
任何对原始指针的解引用(如 *ptr 或 ptr->member)前,都应确保其不为空。尤其是在函数参数传递、动态内存分配失败(new 可能抛出异常,但 malloc 返回 nullptr)等场景下。
安全模式:void printValue(int* ptr) {
if (ptr) {
std::cout << *ptr << std::endl;
} else {
std::cout << "Pointer is null" << std::endl;
}
}
基本上就这些。用 if (!ptr) 或 if (ptr == nullptr) 判断即可,优先使用 nullptr,配合智能指针能大幅减少空指针问题。不复杂但容易忽略。









