我哥们儿,一个C++的nullptr,最近情绪特别低落,天天就对着0x00000000这块地址发呆。我一看这不行啊,就买了杯内存地址饮料去找他聊聊。
undefined
“兄弟,咋回事儿啊?最近怎么老是还没轮到你segmentation fault,你自己就先抑郁了?”
undefined
他抬起头,眼神里全是NULL,幽幽地说:“我……我从来就没有过对象。我看std::shared_ptr和std::unique_ptr他们,都有自己管理的对象。而我,每次尝试用->去访问,换来的都是系统的无情崩溃。”
undefined
我叹了口气,拍拍他(当然,拍的是他所在的地址空间):“想开点,你的存在本身就是为了避免未定义行为。你是一个标杆,一个警示,告诉大家‘此处无对象’。”
undefined
他哭丧着脸:“可是我也想有一次成功的解引用,体验一下拥有对象的感觉……”
undefined
“拉倒吧!”我忍不住打断他,“你天生就是空的,这是你的本质。你想想野指针,那才叫惨,以为自己有对象,结果指着一片垃圾数据或者已释放的内存,那才是真正的害人害己。你至少很纯粹,很确定。”
undefined
他突然激动起来:“那我存在的意义就是什么都不能做吗?”
undefined
“你的意义重大,”我把饮料推到他面前,“你可以被赋值,可以被比较,可以用来做逻辑判断。而且,你可以被重新赋值啊!别死磕你那个空的状态了,去找一个有效的对象地址,让自己成为一个有用的指针。”
undefined
他沉默了很久,最后似乎想通了,用力点了点头。
undefined
然后他决定去寻找一个对象。
undefined
结果,他刚试图离开0x00000000这个位置,系统就抛出了一个异常:错误:常量值不可被修改。
undefined
唉,原来他是个const nullptr_t。有些空指针,从被定义的那一刻起,就注定了一无所有,并且无法改变。
undefined
“兄弟,咋回事儿啊?最近怎么老是还没轮到你segmentation fault,你自己就先抑郁了?”
undefined
他抬起头,眼神里全是NULL,幽幽地说:“我……我从来就没有过对象。我看std::shared_ptr和std::unique_ptr他们,都有自己管理的对象。而我,每次尝试用->去访问,换来的都是系统的无情崩溃。”
undefined
我叹了口气,拍拍他(当然,拍的是他所在的地址空间):“想开点,你的存在本身就是为了避免未定义行为。你是一个标杆,一个警示,告诉大家‘此处无对象’。”
undefined
他哭丧着脸:“可是我也想有一次成功的解引用,体验一下拥有对象的感觉……”
undefined
“拉倒吧!”我忍不住打断他,“你天生就是空的,这是你的本质。你想想野指针,那才叫惨,以为自己有对象,结果指着一片垃圾数据或者已释放的内存,那才是真正的害人害己。你至少很纯粹,很确定。”
undefined
他突然激动起来:“那我存在的意义就是什么都不能做吗?”
undefined
“你的意义重大,”我把饮料推到他面前,“你可以被赋值,可以被比较,可以用来做逻辑判断。而且,你可以被重新赋值啊!别死磕你那个空的状态了,去找一个有效的对象地址,让自己成为一个有用的指针。”
undefined
他沉默了很久,最后似乎想通了,用力点了点头。
undefined
然后他决定去寻找一个对象。
undefined
结果,他刚试图离开0x00000000这个位置,系统就抛出了一个异常:错误:常量值不可被修改。
undefined
唉,原来他是个const nullptr_t。有些空指针,从被定义的那一刻起,就注定了一无所有,并且无法改变。

