C++原生指针,引用与智能指针

Ref

原生指针

c++原生指针来源于c语言,常与取地址运算符&搭配使用,基本操作有修改指针指向,解引用操作。常用于获取动态内存分配得到的地址、减少数据拷贝操作(如函数传参)等。

int a=5,b=7;
int *p=&a;//取地址
*p=15; //解引用
p=&b;
*p=17;

引用

引用是c++有而c没有的语法,引用在语义上是等价于被引用对象,对引用的操作即是对被引用对象内存的操作。引用在底层是指针,但是在行为上与指针不同而与被引用对象相同。如下例:

int a=7,b=8;
int &ref=a;
ref=10;
int *pb=&b;
int vc[5]={0,1,2,3,4};
int *pc=vc;//指向vc[0]
int &rc=vc;//指向vc[0]
pc++;//pc指向下vc[1]
rc++;//rc仍指向vc[0],++操作修改的是被指对象的值。vc[0]变为1;

引用的独特之处在于,引用被定义后,不可更改所指(其行为与被引用对象相同,没有此操作)。

智能指针

智能指针是c++2.0的新特性之一,其最大的特点在于其结合了指针和对象构造析构的优点RAII,使得其在其生存期结束时可以及时释放其所管理的资源(动态内存分配得到的资源)。常用智能指针有unique_ptr<T>、shared_ptr<T>和weak_ptr<T>。

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

推荐阅读更多精彩内容

  • C++裸指针的内存问题有:1、空悬指针/野指针2、重复释放3、内存泄漏4、不配对的申请与释放 使用智能指针可以有效...
    WalkeR_ZG阅读 3,143评论 0 5
  • 原作者:Babu_Abdulsalam 本文翻译自CodeProject,转载请注明出处。 引入### Ooops...
    卡巴拉的树阅读 30,178评论 13 74
  • 导语: C++指针的内存管理相信是大部分C++入门程序员的梦魇,受到Boost的启发,C++11标准推出了智能指针...
    7ee72f98ad17阅读 930评论 0 1
  • C#、Java、python和go等语言中都有垃圾自动回收机制,在对象失去引用的时候自动回收,而且基本上没有指针的...
    StormZhu阅读 3,774评论 1 15
  • 0、摘要 本文先讲了智能指针存在之前C++面临的窘境,并顺理成章地引出利用RAII技术封装普通指针从而诞生了智能指...
    嗯哼_9793阅读 773评论 0 0