随笔分类 - C++
摘要:内存对齐规则 每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。32位系统,gcc中默认#pragma pack(4),可以通过预编译命令#pragma pack(n),n = 1,2,4,8,16来改变这一系数。 有效对齐值:是给定值#pragma pack(n)和结构体中最长数据
阅读全文
摘要:将可能会被继承的父类的析构函数设置为虚函数,可以保证当我们new一个子类,然后使用基类指针指向该子类对象,释放基类指针时可以释放掉子类的空间,防止内存泄漏。 C++默认的析构函数不是虚函数是因为虚函数需要额外的虚函数表和虚表指针,占用额外的内存。而对于不会被继承的类来说,其析构函数如果是虚函数,就会
阅读全文
摘要:底层实现: STL 众多容器中,vector 是最常用的容器之一,其底层所采用的数据结构非常简单,就只是一段连续的线性内存空间。 通过分析 vector 容器的源代码不难发现,它就是使用 3 个迭代器(可以理解成指针)来表示的: //_Alloc 表示内存分配器,此参数几乎不需要我们关心 templ
阅读全文
摘要:static作用:“改变生命周期” 或者 “改变作用域” static 关键字至少有下列 n 个作用: (1)函数体内 static 变量的作用范围为该函数体,不同于auto 变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值; (2)在模块内的 static 全局变量可以被模块内所
阅读全文
摘要:vector迭代器什么时候会失效? 一、 push_back导致迭代器失效 vector在push_back的时候当容量不足时会触发扩容,导致整个vector重新申请内存,并且将原有的数据复制到新的内存中,并将原有内存释放,这自然是会导致迭代器失效的,因为迭代器所指的内存都已经被释放。 二、inse
阅读全文
摘要:封装:也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。 继承(inheritance):C++通过类派生机制来支持继承。被继承的类型称为基类或超类,新产生的类为派生类或子类。保持已有类的
阅读全文
摘要:C++中的虚函数的作用主要是实现多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。 虚函数表 C++ 虚函数(Virtua
阅读全文
摘要:单例模式 单例模式顾名思义,保证一个类仅可以有一个实例化对象,并且提供一个可以访问它的全局接口。实现单例模式必须注意一下几点: 单例类只能由一个实例化对象。 单例类必须自己提供一个实例化对象。 单例类必须提供一个可以访问唯一实例化对象的接口。 单例模式分为懒汉和饿汉两种实现方式。 懒汉单例模式 懒汉
阅读全文
摘要:1.STL六大组件? 容器,迭代器,算法,仿函数,空间配置器,容器配接器。 容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据,从实现角度来看,STL容器是一种class template。 算法:各种常用的算法,如sort、find、copy、for_each
阅读全文
摘要:auto_ptr、unique_ptr策略:建立所有权概念,对于特定的对象,只有一个智能指针可以拥有它,这样只有拥有对象的智能指针的构造函数才能删除该对象。然后,让赋值操作转让所有权。unique_ptr的策略更严格。 shared_ptr:采用引用计数。类中有一个计数器,赋值时加1,过期时减1,当
阅读全文
摘要:五种IO模型1:阻塞IO:再内核将数据准备好之前,系统调用会一直等待;(所有的套接字默认都是阻塞方式) 2:非阻塞IO:如果内核未将数据准备好,系统调用仍然会直接返回,并且返回EWOULDBLOCK错误码。(非阻塞IO往往需要程序员循环的方式反复尝试读写文件描述符,这个过程成为轮回。对cpu来说是很
阅读全文
摘要:C++内存管理中内存泄露(memory leak)一般指的是程序在申请内存后,无法释放已经申请的内存空间,内存泄露的积累往往会导致内存溢出。 一、内存分配方式 通常内存分配方式有以下三种: (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,
阅读全文
摘要:关键问题点:const 属于修饰符 ,关键是看const 修饰的位置在哪里 1、const int *a 这里const 修饰的是int,而int定义的是一个整值 因此*a 所指向的对象 值 不能通过 *a 来修改,但是 可以重新给 a 来赋值,使其指向不同的对象 eg: const int *a
阅读全文
摘要:C++的hash表中有一个负载因子loadFactor,当loadFactor<=1时,hash表查找的期望复杂度为O(1).因此,每次往hash表中添加元素时,我们必须保证是在loadFactor <1的情况下,才能够添加。 因此,当Hash表中loadFactor==1时,Hash就需要进行re
阅读全文
摘要:1.C++ this 指针介绍一下 通常在class定义时要用到类型变量自身时,因为这时候还不知道变量名(为了通用也不可能固定实际的变量名),就用this这样的指针来使用变量自身。一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。
阅读全文

浙公网安备 33010602011771号