if (ptr <= nullptr); // OK int a = 0; if (a == nullptr); // error: invalid operands of types 'int' and 'std::nullptr_t' to binary 'operator==' 来自Wikipedia:-…空指针常量:nullptr。它的类型为nullptr_t,它可以隐式转换,并且可以与任何指针类型或指针到成员类型进行比较。 -除了布尔值...
未初始化的指针可能包含任意值,尝试解引用这样的指针是危险的。 int* ptr = nullptr;//使用 nullptr 初始化指针 2. 检查指针是否为空 在解引用指针之前,总是检查它是否为空。 if(ptr !=nullptr) {//现在可以安全地使用 ptr} 3. 使用智能指针 C++11 引入了智能指针,如std::unique_ptr和std::shared_ptr,...
根本原因就是:常数0既是整数常量,也是空指针常量。 为了解决这种二义性,C++11标准引入了关键字nullptr,它作为一种空指针常量。#7例如: voidfoo(int) {}//#1voidfoo(char*) {}//#2intmain() { foo(nullptr);//它会毫无异议地调用#2} 附注: [#1] C99: 7.17-p3: The macros are NULL which expands ...
nullptr是专门用来表示空指针的字面量,它的类型是std::nullptr_t,可以自动转换为任何原生指针类型(raw...
if(fp==NULL) { printf("不能打开文件 nofile.txt\n"); } return(0); } 假设文件file.txt已存在,但是nofile.txt不存在。让我们编译并运行上面的程序,这将产生以下结果: 成功打开文件file.txt不能打开文件nofile.txt 动态内存分配: 实例 #include <stdio.h> ...
if (name != nullptr) { if (this->mName != nullptr) { // 如果不检查并释放已有内存,就会出现内存泄漏 delete[] this->mName; } int len = strlen(name); this->mName = new char[len + 1]; if (this->mName != nullptr) {
int* ptr = nullptr; // 使用 nullptr 初始化指针 1. 2. 检查指针是否为空 在解引用指针之前,总是检查它是否为空。 if (ptr != nullptr) { // 现在可以安全地使用 ptr } 1. 2. 3. 3. 使用智能指针 C++11 引入了智能指针,如std::unique_ptr和std::shared_ptr,它们可以自动管理内存,并在尝试解引...
CC++杂记:NULL与0的区别、nullptr的来历 某些时候,我们需要将指针赋值为空指针,以防⽌野指针。有⼈喜欢使⽤NULL作为空指针常量使⽤,例如:int* p = NULL;。也有⼈直接使⽤0值作为空指针常量,例如:int* p = 0;。前者可能觉得:NULL作为空指针常量,名字很形象,可读性较强。后者可能觉得:NULL...
我们都知道NULL在C中是一个宏,宏有时也会引起不必要的问题在C++11中则有了nullptr,所以这块显示是已经被宏过了,所有不执行#define 到#endef的程序段所以看起来是灰色的。 红色框框是每个函数都有的,就是主函数栈帧开辟和销毁的过程,再看中间好家伙啥都没有,再次印证了,...
template <typename T>inline void safe_delete_void_ptr(void *&target) { if (nullptr != target) { T* temp = static_cast<T*>(target); delete temp; temp = nullptr; target = nullptr; }} 调用方法 int *psample = new int(100);safe_delete_void_ptr<int>(psample); ...