使用智能指针来管理内存可以避免手动调用malloc和free函数,提高代码的可读性和可维护性。通常,我们可以通过重载指针运算符和删除器(deleter)来实现智能指针的功能。重载指针运算符可以使智能指针的使用方式类似于常规指针,而删除器则定义了智能指针在释放内存时的行为,例如使用free或delete操作释放内存。 3. 学习C语言智能...
shared_ptr是原始指针的容器。它是一个引用计数所有权模型,即它与shared_ptr的所有副本协作维护其包含的指针的引用计数。因此,每当一个新的指针指向资源时,计数器就会增加,而在调用对象的析构函数时,计数器就会减少。 引用计数:这是一种用于存储对资源(例如对象,内存块,磁盘空间或其他资源)的引用,指针或句柄数量的...
1. 几种智能指针 1. auto_ptr: c++11中推荐不使用他(放弃) 2.shared_ptr:拥有共享对象所有权语义的智能指针 3.unique_ptr:拥有独有对象所有权语义的智能指针 4.weaked_ptr:到std::shared_ptr所管理对象的弱引用 1.1 shared_ptr 参考:https://zh.cppreference.com/w/cpp/memory/shared_ptr std::shared_...
weak_ptr的主要使用场景,一是用于探查是否内存空间是否有效,用户可以通过expired()或者lock()来检测数据的有效性,以避免空指针。二是可以用于打破循环引用。c++20中的原子智能指针 智能指针的计数器是线程安全,但是其指向的对象的不是线程安全的。如果需要多个线程操作,为了保证安全性,可以 1、直接调用 mutex 的 ...
一、智能指针的学习: 1、内存泄漏: 关于内存泄漏这个问题,一般都会牵扯到指针这个话题,也就是我们常说的动态内存分配;然而在程序员手动进行堆空间的分配时(指针无法控制所指堆空间的生命周期,),往往在写完程序的时候,程序员一不小心就忘了释放已经手动分配的内存大小,导致软件Bug不断(也就是内存泄漏)。
智能指针是一个组合类,旨在管理动态分配的内存并确保在智能指针对象超出范围时删除内存。智能指针只是包装原始指针并重载->and*运算符的类;这允许它们提供与原始指针相同的语法。智能指针在<memory>头文件的std命名空间中定义。它们对于RAII(对象生命周期和资源管理)或资源获取即初始化编程习惯至关重要。这个习惯用法的...
本文要学习的内容: (1)指针在C / C ++中的重要性。 (2)普通指针出现问题。 (3)为什么引入智能指针。 (2)智能指针的类型。 指针在C / C ++中的重要性: 指针用于访问程序外部的资源,例如堆内存。因此,如果在堆内存中创建了任何东西,则用于访问堆内存。
差别是:shared_ptr同意多个指针指向同一个对象;unique_ptr则独占所指向的对象。 另外。另一种weak_ptr的伴随类,它是一种弱引用。指向shared_ptr所管理的对象。 自己定义智能指针实现方法: 实现方法使用引用计数方法。 智能指针将一个计数器与类指向的对象相关联,引用计数跟踪一共同拥有多少个类对象共享同一指针。
标准库 智能指针( smart pointer ) 是啥玩意儿 一,为什么有智能指针??? c++程序员需要自己善后自己动态开辟的内存,一旦忘了释放,内存就泄露。 智能指针可以帮助程序员"自动释放"自己开辟的内存。 二,从哪里看出来智能了??? int*p = newint(11);auto_ptr<int>pa(p);//auto_ptr已经不推荐使用//delete p;...
shared_ptr需要记住一句话,它可以允许多个指针指向同一个对象。 1.1 使用举例 我们可以使用如下的方式来声明一个智能指针,这个指针指向int类型的指针,我把它命名为ptr1,目前这个指针是默认初始化的形式,保存的是一个空指针。 shared_ptr<int>ptr1; 当然我们要为这个指针指向一块动态分配的内存,该用什么样的方式来...