简书网站暂停一个月,很搞
话说笔者被C++的这几个东西搞得很方,特地来整理一下。
value这个简单
reference 和pointer这两个要注意,他们不是一回事。不是说Java里的reference在C++叫pointer,完全不是这样子。
C++里的Reference不可以是null, 所以不用check reference. Reference不能被reassign
C++ 对Class object在声名变量的时候会直接初始化, 所以只要有变量名或者reference在,就肯定不会是null的。
C++的Reference好像是C++ 11之后才加进来的? 之前一直是只有pointer没有reference.
但是pointer可能是null 所以在有需要的时候是要check的。
std::<shared_ptr>
Do i need to check an object is null?
Shared_ptr, Unique_ptr, weak_ptr, auto_ptr
https://mbevin.wordpress.com/2012/11/18/smart-pointers/
auto_ptr是旧的东西, 不安全已经被depreciated了。
shared_ptr, unique_ptr, weak_ptr 是三个新的class. 用它的话需要#include <memory> 然后 用std:: prefix
由于这几个东西的出现,现代C++已经不需要再手动delete 或者free了。
unique_ptr
存一个pointer, Pointer不能被copy, 可以用std::move来转让一个pointer, 转让之后原来的pointer就不再hold东西了
可以reset, 当pointer不存在的时候,对就的object也就不存在了。
提供一个办法
经常用在以下几个地方
Class Members
Shared pointer
推荐使用这个
weak pointer
解决循环 pointer的问题, 很少用到
plain pointer
什么叫 forward declaration
&&又是什么意思
什么时候用pointer 什么时候用referece
为什么不直接用reference而有时要用pointer
pointer可以有多层indirection, reference只能有一层
int *p, 指向int的pointer
int **q 指向pointer的pointer.
int &p = a; 指向int的reference
int &&q指向reference的reference,这是不被允许的, 是错的。
在函数的参量和return type里面用references.
当需要进行pointer算术,null pointer需要的时候, 在linkedList, tree这种数据结构里要用pointer。 因为reference不能被reassign value 所以这时是没用的。