nullptr and Dynamic Memory Allocation (空指针和动态内存分配)
1. 空指针
1.1. 0带来的二义性问题
- C++03中,空指针使用“0”来表示。0既是一个常量整数,也是一个常量空指针。
- C语言中,空指针使用(void *)0来表示
- 有时候,用“NULL”来表示空指针(一种可能的实现方式是#define NULL 0)
1.2. C++标准化委员会希望“空指针”是一个确定的东
C++11中引入保留字“nullptr”作为空指针
2. Dynamic memory management: Allocate/Release (动态内存管理:分配/释放)
2.1. C++中通过运算符new申请动态内存
new <类型名> (初值) ; //申请一个变量的空间
new <类型名>[常量表达式] ; //申请数组
如果申请成功,返回指定类型内存的地址;
如果申请失败,抛出异常,或者返回空指针(nullptr)。(C++11)
2.2. 动态内存使用完毕后,要用delete运算符来释放。
delete <指针名>; //删除一个变量/对象
delete [] <指针名>; //删除数组空间
2.3.c和c++关于动态内存分配的区别
3.空指针和动态内存分配代码示例
#include <iostream>
int main() {
int* p = nullptr;
int* q{ nullptr }; // C++11 Initializer List
p = new int(42);
q = new int[ 4 ];
std::cout << "Before: *p =" << *p << std::endl;
*p = 24;
std::cout << "After: *p =" << *p << std::endl;
for (int i = 0; i < 4; i++) {
*(q + i) = 10 + i;
std::cout << *(q+i) << std::endl;
}
delete p;
delete [] q;
std::cin.get();
return 0;
}
输出
before:*p=42
after:*p=24
10
11
12
13
来源:CSDN
作者:一条特立独行的渣渣咸鱼
链接:https://blog.csdn.net/qq_33934599/article/details/104575616