- 操作系统在运行程序时,总是根据内存地址来查找该地址中存放的内容,继而进行运算的。所以,要知道,加载到内存中的所有数据都是存放在一定的地址中的。
- 如下代码段,我们查看一下nullptr到底是什么?
点击查看代码
#include <iostream>int main()
{void* var = nullptr;std::cin.get();return 0;
}
- 当然,我们在写C++代码时,也可以使用NULL或0(容易产生阅读上的歧义),只不过在代码风格上可能会有些不统一,所以,一般而言,都是使用nullptr。NULL是一个宏定义,这个可以直接查看到,它也是0。
- nullptr/NULL既然都是0,那为什么一个数字0会容易引起程序崩溃?
这是因为当它代表或者转换( '#define NULL ((void*)0)' )为一个内存地址时,这个地址0x0000 0000在操作系统看来是一个无效的或者不存在的地址,所以,让OS从一个它认为无效的地址中取数据进行运算,就会出现访问冲突的问题,实际上并不是内存本身无效,而是OS认为它无效。
如下代码,写一个简单的类Entity,然后通过类的实例entity_instance来调用类的方法:
点击查看代码
class Entity
{
public:Entity() = default;~Entity() {}
public:void printType(){std::cout << "Entity" << std::endl;}const std::string& getName() const{return m_Name;}
private:Entity* m_Parent;std::string m_Name;
};
int main()
{Entity* entity_instance = nullptr;std::cout << entity_instance->getName() << std::endl;std::cin.get();return 0;
}