智能指针是用法和行为类似于指针的类对象。 智能指针的底层对原始指针做了一定的封装。 智能指针除了像指针一样可以存储变量的地址,还提供了其他功能,比如可以管理动态内存分配,对引用进行计数等。 当智能指针所指向的变量离开了作用域或被重置时,智能指针会自动释放该变量所占用的堆内存资源。 至于为什么要引入智能指...
1、使用智能指针托管的对象,尽量不要在再使用原生指针 很多开发同学(包括我在内)在最开始使用智能指针的时候,对同一个对象会混用智能指针和原生指针,导致程序异常。 2、不要把一个原生指针交给多个智能指针管理 如果将一个原生指针交个多个智能指针,这些智能指针释放对象时会产生对象的多次销毁 3、尽量不要使用 get...
1) get用来显式的返回auto_ptr所拥有的对象指针。我们可以发现,标准库提供的auto_ptr既不提供从“裸”指针到auto_ptr的隐式转换(构造函数为explicit),也不提供从auto_ptr到“裸”指针的隐式转换,从使用上来讲可能不那么的灵活, 考虑到其所带来的安全性还是值得的。 2) release用来转移所有权 3) reset,用来接...
在使用基本指针类型时,因为要手动释放指针指向的内存,常常容易造成内存泄漏,特别是异常分支很多的情况下。而智能指针类型就是将基本指针类型封装成模板类,以便更好地管理内存。 智能指针都包含一个explicit构造函数,因此基本指针类型不能隐式转换成智能指针,需要显式调用。 1 2 3 4 5 6 shared_ptr<double> sp_d...
|智能指针 一、什么是RAII? RAll(Resource Acquisition ls Initialization)是由c++之父Bjarne Stroustrup提出的,中文翻译为资源获取即初始化,使用局部对象来管理资源的技术称为资源获取即初始化;这里的资源主要是指操作系统中有限的东西如内存(heap)、网络套接字,互斥量,文件句柄等等,局部对象是指存储在栈的对象,它的...
错误#1:当唯一指针够用时却使用了共享指针 我最近在一个继承的代码库项目中工作,它使用了一个shared_ptr(译者注:共享指针)创建和管理所有的对象。我分析了这些代码,发现在90%的案例中,被shared_ptr管理的资源并非是共享的。 有两个理由可以指出这是错误的: ...
因为一块动态内存只能由一个智能指针独享,所以在拷贝构造或赋值时都会发生拥有权转移的过程。在此拷贝构造过程中,pstr_auto将失去对字符串内存的所有权,而pstr_auto2将其获得。对象销毁时,pstr_auto2负责内存的自动销毁。 3) 赋值 利用已经存在的智能指针来构造新的智能指针 ...
使用省略号匹配:类似printf中省略号参数 指针*和引用&的区别(字节、快手一面出现) c++指针和引用的区别在于:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元,在逻辑上是独立的,它可以被改变; 而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名,它在逻辑上不是独立的,它...
std::shared_ptr是通过指针保持对象共享所有权的智能指针。多个shared_ptr对象可占有同一对象。下列情况之一出现时销毁对象并解分配其内存: 最后剩下的占有对象的shared_ptr被销毁; 最后剩下的占有对象的shared_ptr被通过operator=或reset()赋值为另一指针。
这是C++11新特性介绍的第五部分,涉及到智能指针的相关内容(shared_ptr, unique_ptr, weak_ptr)。 不想看toy code的读者可以直接拉到文章最后看这部分的总结。 shared_ptr shared_ptr 基本用法 shared_ptr采用引用计数的方式管理所指向的对象。当有一个新的shared_ptr指向同一个对象时(复制shared_ptr等),引用计...