C++ value, reference, pointer, * &

简书网站暂停一个月,很搞
话说笔者被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 所以这时是没用的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 智能指针 为了使管理动态内存更容易、更安全,新标准库提供了两种管理动态对象的智能指针类型。智能指针的作用类似于常规...
    铭小汁儿阅读 3,821评论 0 2
  • C++裸指针的内存问题有:1、空悬指针/野指针2、重复释放3、内存泄漏4、不配对的申请与释放 使用智能指针可以有效...
    WalkeR_ZG阅读 8,299评论 0 5
  • 导语: C++指针的内存管理相信是大部分C++入门程序员的梦魇,受到Boost的启发,C++11标准推出了智能指针...
    7ee72f98ad17阅读 4,470评论 0 1
  • 原作者:Babu_Abdulsalam 本文翻译自CodeProject,转载请注明出处。 引入### Ooops...
    卡巴拉的树阅读 30,239评论 13 74
  • 窦红梅 焦初级43期第1002天分享: 今天女儿放学我接她的路上~我给孩子说你想想咱俩每天在一起的时候很...
    阿慧_c55c阅读 1,625评论 0 0