但是指针又是一个非常高效,有没有更安全的方式去使用指针呢? C++中两种典型方案:1.使用智能指针 2.使用引用 1.智能指针 C++中四种常见的指针:unique_ptr,shared_ptr,weak_ptr,以及C++中已经废弃的auto_ptr。 下面我们根据对象所有权以及对象生命周期分别对这4类进行讲解: 1.auto_ptr auto_ptr要求同时只能有一...
首先我们需要一个指针reference来指向资源,当智能指针构造时,用reference指针指向资源,在我们确定资源应该被析构时,我们对reference指针进行delete。 如果只有reference指针的话,只能实现出auto_ptr的效果,我们还需要添加引用计数系统counter来统计指向资源的智能指针的个数。counter不可以是一个普通的int型变量,因为不同的智...
std::weak_ptr:用来监视shared_ptr的生命周期,它不管理shared_ptr内部的指针,它的拷贝析构都不会影响引用计数,纯粹是作为一个旁观者监视shared_ptr中管理的资源是否存在,可以用来返回this指针和解决循环引用问题。 std::unique_ptr:独占型的智能指针,它不允许其它智能指针共享其内部指针,也不允许unique_ptr的拷贝和...
语法上,type*代表指针,而type&代表引用。例如,int&表示一个int类型的引用。声明引用变量时,必须初始化,因为它是一个别名的声明。 举个例子: cpp int i; int& ri = i; // 说明ri是i的别名,ri是引用类型声明变量 总结📝 智能指针和引用是C++中两个非常重要的概念,它们可以帮助你更安全、更高效地管理内存...
1.智能指针通过RAII方法来管理指针:构造对象时,完成资源初始化;析构对象时,对资源进行清理及汕尾. 2.auto_ptr,通过“转移所有权”来防止析构一块内存多次.(如何转移?详情看第二篇文章) 3.scoped_ptr,不“转移所有权”而是禁止拷贝/赋值对象.(C++如何禁止拷贝对象?详情看第三篇文章) ...
weak_ptr的主要使用场景,一是用于探查是否内存空间是否有效,用户可以通过expired()或者lock()来检测数据的有效性,以避免空指针。二是可以用于打破循环引用。c++20中的原子智能指针 智能指针的计数器是线程安全,但是其指向的对象的不是线程安全的。如果需要多个线程操作,为了保证安全性,可以 1、直接调用 mutex 的 ...
一,智能指针 1.智能指针简介 智能指针是用法和行为类似于指针的类对象。 智能指针的底层对原始指针做了一定的封装。 智能指针除了像指针一样可以存储变量的地址,还提供了其他功能,比如可以管理动态内存分配,对引用进行计数等。 当智能指针所指向的变量离开了作用域或被重置时,智能指针会自动释放该变量所占用的堆内存...
shared_ptr是一种强引用关系,智能指针直接引用对象,代码会引起循环引用,从而造成内存泄漏。 weak_ptr用于配合shared_ptr使用并不影响对象的生命周期,即存在与否并不影响对象的引用计数器,weak_ptr并没有重载operator-> 和operator* 操作符,因此不可直接通过weak_ptr使用对象。提供了expired()与lock()成员函数,前者用于...
智能指针概述: 智能指针用来管理动态对象。其行为类似于常规指针,重要的差别是:它负责自己主动释放所指向的对象。 C++ 11标准库提供两种智能指针:shared_ptr、unique_ptr 差别是:shared_ptr同意多个指针指向同一个对象;unique_ptr则独占所指向的对象。 另外。另一种weak_ptr的伴随类,它是一种弱引用。指向shared_ptr...
1. 智能指针简介 为了解决可能发生的内存泄漏问题,C++ 提出了智能指针的概念。智能指针本质上为类对象,具备以下特征: 生命周期结束时,自动释放指向的内存空间。 只能指向堆空间的内存,不能指向其他空间的内存,因为只有堆空间内存的生命周期是可控的。 多个智能指针不能指向同一内存空间,防止重复对相同的内存释放。 智能...