使用普通指针,容易造成堆内存泄露(忘记释放),二次释放,程序发生异常时内存泄露等问题等,使用智能指针能更好的管理堆内存。 理解智能指针需要从下面三个层次: 从较浅的层面看,智能指针是利用了一种叫做RAII(资源获取即初始化)的技术对普通的指针进行封装,这使得智能指针实质是一个对象,行为表现的却像一个指针。 智...
在C++标准库中有三种智能指针:std::unique_ptr、std::shared_ptr 和 std::weak_ptr。其中,std::unique_ptr 用于独占拥有对象的所有权,std::shared_ptr 允许多个指针共享对象所有权,而 std::weak_ptr 则是一种弱引用,用于解决 std::shared_ptr 的...
智能指针将一个计数器与类指向的对象相关联,引用计数跟踪一共同拥有多少个类对象共享同一指针。 实现要点: 每次创建类的新对象的时候,初始化指针并将引用计数置为1。 当对象作为还有一对象的副本而创建的时候,也就是拷贝构造时候,拷贝构造函数拷贝指针并添加与之相应的引用计数; 当对一个对象进行赋值操作的时候,赋值...
原理:智能指针是一个类,用来存储指向动态分配对象的指针,负责自动释放动态分配的对象,防止堆内存泄漏。动态分配的资源,交给一个类对象去管理,当类对象声明周期结束时,自动调用析构函数释放资源。 常用的智能指针 (1) shared_ptr 实现原理:采用引用计数器的方法,允许多个智能指针指向同一个对象,每当多一个指针指向该...
C++程序设计的一种常用技术——智能指针(smart pointer),主要内容包括引用计数(reference count)和句柄类(handle class)。 当类中有指针成员时,一般有两种方式来管理指针成员:一是采用值型的方式管理,每个类对象都保留一份指针指向的对象的拷贝;另一种更优雅的方式是使用智能指针,从而实现指针指向的对象的共享。 智能...
好的,解决方案来自于我们即将讨论的另一个智能指针boost::weak_ptr. weak_ptr是shared_ptr的一个观察者;它只是安静地坐着并看着它们,但不会影响引用计数。通过存储一个指向this的weak_ptr作为类的成员,就可以在需要的时候获得一个指向this的shared_ptr。为了你可以不必编写代码来保存一个指向this的weak_ptr,接着...
内存泄漏,主要指的是在堆(heap)上申请的动态内存泄漏,或者说是指针指向的内存块忘了被释放,导致该块内存不能再被申请重新使用。 之前在知乎上看了一句话,指针是C的精髓,也是初学者的一个坎。换句话说,内存管理是C的精髓,C/C++可以直接跟OS打交道,从性能角度出发,开发者可以根据自己的实际使用场景灵活进行内存...
智能指针原理:引用计数、RAII(资源获取即初始化)思想 智能指针使用:shared_ptr、weak_ptr、unique_ptr 一些关键字的作用:static、const、volatile、extern 四种类型转换:static_cast, dynamic_cast, const_cast, reinterpret_cast STL部分容器的实现原理,如 vector、deque、map、hashmap 模板特化、偏特化,萃取 traits ...
这些优化不仅有助于充分利用硬件资源,还能提升用户体验,特别是在资源受限或要求高性能的应用场景中。 4.2 利用现代C++特性 现代C++(C++11及其之后的版本)引入了许多新特性,这些特性不仅提高了代码的可读性和可维护性,还提供了优化程序性能的强大工具。以下是一些可以显著提高CPU效率的现代C++特性: 4.2.1 智能指针 ...
智能指针原理:引用计数、RAII(资源获取即初始化)思想 智能指针使用:shared_ptr、weak_ptr、unique_ptr等 一些关键字的作用:static、const、volatile、extern 四种类型转换:static_cast, dynamic_cast, const_cast, reinterpret_cast STL部分容器的实现原理,如 vector、deque、map、hashmap 模板特化、偏特化,萃取 traits...