3. 不要混用智能指针和原始指针 我们应该避免将同一块内存同时交给智能指针和原始指针管理。一般来说,如果我们已经使用智能指针管理了一块内存,就不应该再使用原始指针指向这块内存。我们可以只使用智能指针,或者在必要时使用 std::shared_ptr::get 方法获取原始指针,但必须注意不要使用原始指针操作内存(例如删除它)。
因此,每当一个新的指针指向资源时,计数器就会增加,而在调用对象的析构函数时,计数器就会减少。 引用计数:这是一种用于存储对资源(例如对象,内存块,磁盘空间或其他资源)的引用,指针或句柄数量的技术。 直到引用计数大于零(即,直到shared_ptr的所有副本都已删除),包含的原始指针引用的对象才会被销毁。 因此,当我们...
1.2 用shared_ptr还是unique_ptr 因为我们需要把智能指针的默认删除器改为自定义删除器,用shared_ptr会很不方便,因为你无法直接将shared_ptr的删除器修改为自 定义删除器,虽然你可以通过重新创建一个新对象,把原对象拷贝过来的做法来实现,但是这样做效率比较低。而unique_ptr由于是独占语义,提供了一 种简便的方法方...
unique_ptr 是一个独享所有权的智能指针,它提供了严格意义上的所有权,包括: 1、拥有它指向的对象 2、无法进行复制构造,无法进行复制赋值操作。即无法使两个unique_ptr指向同一个对象。但是可以进行移动构造和移动赋值操作 3、保存指向某个对象的指针,当它本身被删除释放的时候,会使用给定的删除器释放它指向的对象 ...
如果你使用get()返回的指针,记住当最后一个对应的智能指针销毁后,你的指针就变为无效了。 如果你使用智能指针管理的资源不是new分配的内存,记住传递给它一个删除器。 unique_ptr 一个unique_ ptr “拥有”它所指向的对象。与shared_ ptr不同,某个时刻只能有一个unique_ptr指向一个给定对象。当unique_ptr被销毁...
C/C++之智能指针shared_ptr 1、定义 shared_ptr的作用有如同指针,但会记录有多少个shared_ptrs共同指向一个对象。这便是所谓的引用计数(reference counting)。一旦最后一个这样的指针被销毁,也就是一旦某个对象的引用计数变为0,这个对象会被自动删除。这在非环形数据结构中防止资源泄露很有帮助。
不必要的资源使用:即使其他的指针不会修改你的对象资源,但也可能会过长时间地占用你的内存,甚至已经超出了原始shared_ptr的作用范围。 2、创建shared_ptr比创建unique_ptr更加资源密集。 shared_ptr需要维护一个指向动态内存对象的线程安全的引用计数器以及背后的一个控制块,这使它比unique_ptr更加复杂。
简单地说,智能指针只是用对象去管理一个资源指针,同时用一个计数器计算当前指针引用对象的个数,当管理指针的对象增加或减少时,计数器也相应加1或减1,当最后一个指针管理对象销毁时,计数器为1,此时在销毁指针管理对象的同时,也把指针管理对象所管理的指针进行delete操作。
视频:23-3 智能指针shared_ptr (09:02) 视频:23-4 智能指针的删除器 (04:52) 视频:23-5 智能指针weak_ptr (07:58) 第24章 文件操作8 节 | 82分钟 程序运行的时候,数据存放在内存中,内存是临时的存储空间,文件则可以永久的存放数据。 收起列表 ...