C++
WolfOnTheWay
我们的目标就是做大,做强,定创辉煌!
展开
-
一文带你详细了解C++智能指针
智能指针的介绍及作用:当用户在使用裸指针的时候,由于这样或者那样的原因,让已申请的内存没有释放或者多次释放,从而引起程序的崩溃。而智能指针可以让用户不在关注资源的释放。c++提供了带引用计数的智能指针和不带引用计数的智能指针:auto_ptr,scoped_ptr,unique_ptr,shared_ptr,weak_ptr.自己实现智能指针:template<typena...原创 2019-04-01 16:46:34 · 542 阅读 · 0 评论 -
Boost::timer库详解
详细介绍了Boost中timer库中三个组件的使用方法和注意问题。原创 2020-04-29 17:25:20 · 2524 阅读 · 0 评论 -
c++11新特性详解||知识的搬运者
这一块的内容,在cnblogs上有一位大佬总结的非常详细,在这我只做一位知识的搬运者:https://www.cnblogs.com/George1994/p/6684989.html原创 2020-04-11 17:04:31 · 122 阅读 · 0 评论 -
C/C++静态变量盲区(鲜有人知道)||静态变量的地址为什么能保持不变
如下程序,是一个单例模式(我确定),这时我问自己,那么是怎么保证每次GetInstance返回的地址都是一样的呢。程序如下:# include<iostream>using namespace std;class Single{public: static Single* GetInstance() { static Single single; return...原创 2020-04-07 17:24:27 · 804 阅读 · 0 评论 -
吐血整理了c++84个知识点(全是干货)
目录中提到的博客本人已经全部整理过了,大家可以自行翻阅本人博客进行查找。我先将目录贴出来:我将整理的pdf文件放在百度云盘上,需要的自行下载:链接:https://pan.baidu.com/s/12kxtUVhXS2PJHmRIFfFdxA提取码:kthh1.把 int 和 long 两个类型的字节大小说错, 在 32 位、 64 位系统下的 32 位和 64 位编译器下, ...原创 2020-04-04 11:55:52 · 634 阅读 · 3 评论 -
C++构造函数和析构函数能够抛出异常吗????
构造函数能够抛出异常吗?构造函数可以抛出异常,但是不建议这么做。如果构造函数中抛出异常,析构函数将不会执行,需要自己去释放内存。析构函数能够抛出异常吗?析构函数不能、也不应该抛出异常。C++异常处理模型有责任清除哪些由于出现异常所导致的已经失效了的对象,并释放对象原来所分配的资源,就是调用这些对象的析构函数来完成释放资源的任务。 所以从这个意义上说,析构函数已经编程了异常处理...原创 2020-04-03 17:35:35 · 1207 阅读 · 0 评论 -
还不知道C++学什么吗?来看看C++知识图谱
给大家分享一下C++的整体学习框架:首先是基础,接下来是C++的核心内容和API设计原创 2020-04-02 10:06:52 · 653 阅读 · 0 评论 -
C++的析构函数能不能写成虚函数? 什么时候会用到?
答:可以。将析构函数声明为虚析构函数,当基类指针指向派生类对象的时候,这时候通过基类指针来释放派生类对象,虚析构函数就显得特别有用。例如下面程序:# include<iostream>using namespace std;class A{public: A() { cout << "construct A" << endl; } ~...原创 2020-04-01 17:09:30 · 414 阅读 · 0 评论 -
泛型算法 sort, find, find_if,绑定器和取反器, 函数对象 greater和 less||c++
泛型算法的实现独立于容器,可以操作在各个容器以及各种内置类型上。iterator迭代器对指针实现了泛化,泛型算法通过传入的first和last迭代器,脱离容器来进行想用的操作。泛型算法包含在头文件<algorithm>中,现在我们看一下常见的几种泛型算法是怎么实现的。1.泛型算法sort泛型sort的定义如下:inline void sort(const _Ran...原创 2020-03-29 16:36:15 · 520 阅读 · 0 评论 -
自己实现一个映射表(依赖于hash表的链地址法)||c++
开门见山,映射表即存放键值对的一种结构。如果我们要在映射表里面存储一个数字3,这个3可以当作是一个键值,如果我们发现在映射表里面3已经存在,那么我们就把它的值加1。如果没有那么它的值为0,然后根据规则插入到映射表。在C++中的map中,键值对是按照pair的形式进行存储的。接下来我们用链地址法的hash表的来实现这一结构,不了解链地址的hash表的实现可以参考我的另一篇博客链地址法实现hash...原创 2020-03-29 10:51:55 · 800 阅读 · 0 评论 -
staic成员方法、const成员方法和普通成员方法的区别||static和const能不能同时修饰一个成员方法||c++
1.static方法和普通成员方法有什么区别?答:静态成员函数不包含this指针,静态成员函数属于这个类,不再仅仅属于对象。因此静态成员方法和普通成员方法的的区别是。静态成员函数不包含指向对象的this指针,普通成员函数包含一个指向对象的this指针,同时静态成员函数不可以调用非静态成员变量。2.const成员方法和普通成员方法有什么区别?const成员方法即在函数的的末尾加上...原创 2020-03-28 10:16:02 · 504 阅读 · 0 评论 -
explicit、mutable和volatile关键字的作用||c++
1.explicitexplicit(明确的)用于修饰只有一个参数的类的构造函数,防止隐式生成对象(通过此构造函数)。如下:class Num{public: Num(int b) { a = b; cout << "拷贝构造函数调用" << endl; }private: int a;};int main(){ Num num ...原创 2020-03-27 16:56:09 · 356 阅读 · 0 评论 -
c++拷贝构造(复制构造函数)详解||浅拷贝和深拷贝||拷贝构造函数的参数能用值传递吗?
1.拷贝构造函数首先,简单介绍一下拷贝构造函数。拷贝构造函数是构造函数的一种,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数将创建好(已初始化)的对象作为参数,返回一个新的对象。如果我们没有定义拷贝构造函数,系统会自动生成一个默认的拷贝构造函数。拷贝构造函数的一般形式如下所示:ClassName(const ClassName& obj...原创 2020-03-27 15:18:18 · 1016 阅读 · 0 评论 -
什么叫做面向对象(oop)||c++
总结一下(标准答案):面向对象(oop)(Object Oriented Programming的缩写),就是将现实世界与计算机世界对应起来。将现实中具有某种属性和行为的实体抽象成计算机世界的类(类可以实例化成对象),实体属性对应类中的成员变量,实体的行为对应计算机世界的成员方法。...原创 2020-03-27 14:22:27 · 380 阅读 · 0 评论 -
带有默认值的函数和普通函数有什么区别||inline(内联)函数和普通函数的区别||函数重载的相关问题||c++
1.带有默认值的参数和普通函数有什么区别?普通函数和带有默认值参数的函数有什么区别?答:首先,带默认值参数的函数,调用时可以不传入实参;并且形参的默认值必须从右往左给,形参的,默认值只能给一次不能给多次。其次,涉及一点底层,带有默认值的参数在调用时虽然没有传入实参,但是汇编上还是要生成push汇编指令的,把形参的默认值进行压栈,所以从汇编上来讲,并没有说你少传一个实参就能节省汇编...原创 2020-03-27 11:36:31 · 506 阅读 · 0 评论 -
C/C++程序的声明周期(详解)
目录1 预编译2 编译2.1 扫描(词法分析)2.2 语法分析2.3 语义分析2.4 中间语言生成2.5 目标代码生成与优化3 汇编4 链接一个程序从编辑完成到执行一共包括四个部分:预编译、编译、汇编、链接,那么每一个部分具体做了哪些工作呢?接下来将对这四个部分进行详细的介绍。1 预编译预编译是程序声明周期的第一个环节,在预编译阶段,源代码文件...原创 2020-01-18 17:02:17 · 852 阅读 · 0 评论 -
内核空间分配、伙伴系统内存分配原理、slab分配器
目录内核空间的内存分配伙伴系统内存分配原理slab分配器详解内核空间的内存分配这里只介绍一下内核空间内存动态分配和释放的方法。①kmalloc() 函数原型: void * kmalloc(size_t size,gfp_t flags); kmalloc()申请的内存位于物理内存映射区域,而且在物理上也是连续的,它们与...原创 2019-12-07 20:04:39 · 289 阅读 · 0 评论 -
段错误(根源)
任何现代计算机系统都必须为操作系统提供手段来控制对存储器系统的访问。不应该允许一个用户进程修改它的只读文本段,而且也部允许它读或修改任何内核代码中的代码和数据结构。不应该循序它读或者写其他进程的私有存储器,而且允许它修改任何与其他进程共享的虚拟页面,除非所有的共享者都显示的允许它这么做(通过调用明确的进程间通信系统调用)。 就像我们所看到的,提供独立的地址空间使得...原创 2019-12-03 20:26:15 · 267 阅读 · 0 评论 -
C++———malloc申请0字节内存
在c/c++中,用malloc函数申请0字节的内存会返回NULL指针吗?答案是,函数并不会返回NULL,而是返回一个正常的内存地址。但是你却无法使用这块大小为0的内存。好比尺子上的刻度,刻度本身并没有长度,只有两个刻度一起才能量出长度,这时候If(p!=NULL)这样的校验语句将不起作用。...原创 2019-10-17 11:15:40 · 1689 阅读 · 0 评论 -
STL之priority_queue
目录1.什么是priority_queue?2.priority_queue的原型3.大根堆和小根堆1.什么是priority_queue?priority_queue本质上是一个堆,再头文件#include<queue>中,可以理解为大根堆或小根堆。2.priority_queue的原型priority_queue的原型为:priority_qu...原创 2019-10-09 10:45:13 · 644 阅读 · 0 评论 -
第三节
1.面向对象得几点编码规范1&amp;amp;gt;循环里面要少用判断2&amp;amp;gt;类与类之间的常用关系:组合(一部分),继承(一种)。3&amp;amp;gt;尽量将成员变量的初始化卸载初始化列表之中。4&amp;amp;gt;初始化列表中只是规定了初始化的方式,没用规定初始化的顺序,初始化的顺序跟定义的顺序有关.2.在有关对象生命周期的几点问题。1&amp;amp;gt; 对象按引用来进行原创 2019-02-27 16:44:02 · 107 阅读 · 0 评论 -
第二节:空结构体 浅拷贝 拷贝构造 new和malloc 赋值和初始化 运算符重载
空结构体 浅拷贝 拷贝构造 new和malloc 赋值和初始化 运算符重载1.空结构体空结构体在c++的编译环境下的大小是1,在c环境下编译不会通过,但是在Linux下的c环境下的大小是0.结构体定义的是一个变量,而类定义的是一个对象。2.浅拷贝浅拷贝若持有外部资源,即堆上的资源,则不会通过。浅拷贝发生的原因是两个对象指向了相同的一块外部内存,在程序结束时调用析构函数的时候,同一块内存...原创 2019-02-20 17:03:46 · 153 阅读 · 0 评论 -
带有空间配置器的vector容器的实现||迭代器失效||vector总结||C++
1.容器和迭代器平常我们用的string ,char buf[]等都是一些近容器。标准的容器一般都有迭代器和容器适配器。2.容器的适配器allocator.目的:把对象的内存开辟和对象的构造分开,把对象的析构和内存释放分开。construct:构造 如何在一个已经存在的内存上构造对象。destory:析构 如何只调用对象的析构函数。allocate:分配内存 m...原创 2019-03-19 16:11:31 · 181 阅读 · 0 评论 -
STL:函数对象、泛型算法
1.不同类型的迭代器const_iterator begin()const;//只读const_iterator end()const;reverse_iterator rbegin();//反向reverse_iterator rend();const_reverse_iterator rbegin()const;const_reverse_iterator rend()c...原创 2019-03-19 16:53:53 · 157 阅读 · 0 评论 -
第四节
1.成员方法静态成员方法没有this指针,通过类来访问。类的静态成员方法必须在类外进行初始化。长对象只能调用常成员方法。形参是普通指针,实参是对象指针。普通方法只有读操作,则实现成const常方法,如果有写操作就实现为普通方法。普通对象可以调用静态方法,发之不行。普通对象可以调用常方法,反之不行。常对象可以调用静态方法,反之不行。常方法不能修改普通成员,可以修改...原创 2019-03-11 16:34:06 · 120 阅读 · 0 评论 -
第五节:函数模板和类模板
1.模板本身的代码不进行编译模板进行实例化的时候,会进行编译。在函数的调用点,根据指定类型模板进行实例化,产生一段新的代码(模板函数)。2.模板的参数推演在调用函数模板的时候,若没有给定类型,模板会从参数类型推出模板函数的类型。3.模板的特例化(特化、专用化),对特殊类型进行特例化版本。template<>bool compare<char*>(...原创 2019-03-11 16:58:50 · 207 阅读 · 0 评论 -
类和对象考试
1.请写出下面这个类的方法代码class String{public: String(char *pstr) { if(pstr!=NULL) { _pstr = new char[strlen(pstr)+1]; strcpy(_pstr,pstr); } ...原创 2019-03-12 19:55:20 · 208 阅读 · 0 评论 -
STL库看这一篇就够了:STL库总结
1.顺序容器1.vector底层是可以两倍动态扩容的数组 0->1->2->4...常用的方法有:reserve /resize /size /empty /push_back /pop_back /insert /erase2.deque:双端队列底层是动态开辟的二维数组 MAP_SIZE QUEUE_SIZE常用的方法有:push_back /p...原创 2019-03-25 16:52:29 · 1249 阅读 · 0 评论 -
运算符重载
目录1.两点注意事项:1.编译器首先到类里面去找运算符重载函数,然后再到全局下寻找重载函数。2.友元关系是单向的。2.运算符重载的代码实现:3.string的几种用法1.string是在内部定义的字符串类,重载了许多常用的运算符,常用操作如下:2.迭代器遍历string1.两点注意事项:1.编译器首先到类里面去找运算符重载函数,然后再到全局下寻找重载函数。2...原创 2019-03-13 17:12:54 · 109 阅读 · 0 评论 -
STL容器:哈希表
// 计算哈希值的类template<typename T>class CHash{public: int operator()(const T &val) { // 默认用除留余数法 return val; }}; // string User People// 线性探测法实现的哈希表结构 template<typename T, ...原创 2019-03-23 20:38:30 · 651 阅读 · 0 评论 -
C++———简单的客户端和服务端(网络编程)
以前写网络编程都是在linux下,最近在Windows下也尝试了以下网络编程,我将服务端和客户端的代码都放在了github上,有需要的可以直接从上面下载。原创 2019-07-05 16:28:29 · 1366 阅读 · 0 评论 -
C++———转移表的作用以及使用
1.什么是转移表?首先大家不要纠结什么是转移表,后面的例子会让你一目了然。我们先来讲一下转移表的作用:我以前刚开始写项目的时候,发现要通过一个对象来调用很多的函数,但是如果用switch语句来进行判断的话,可能需要上千行的代码。那么有没有简便的方法帮我们来实现调函的操作呢,那就是转移表,它能够使代码变得干练,整洁。它是指针数组的灵活应用。2.代码实现const int ADD = 0...原创 2019-09-10 22:04:58 · 582 阅读 · 1 评论 -
C/C++字符操作
在标准库里,包含了两组函数,用于操作单独的字符,位于头文件ctype.h里面。第一组用于字符分类,第二组用于转换字符。1.字符分类2.字符控制//大小写转换int tolower(int ch);int toupper(int ch);...原创 2019-09-11 20:32:01 · 163 阅读 · 0 评论 -
大小端以及判断
目录1.什么是大小端?2.如何判断大小端?1.什么是大小端?大端模式:字数据的高字节存储载低地址中,而字数据的低字节则存放载高地址中。小端模式:字数据的高字节存储载高地址中,而字数据的低字节则存放载低地址中。说到这里,可能还是不是很了解,下面给个详细的例子?假如有变量 unsigned value = 0x12345678则大端的存储方式为:小端的存储...原创 2019-09-24 21:34:17 · 181 阅读 · 1 评论 -
C++———typedef和define的区别(干货)
目录1.执行时间不同2.作用域不同3.功能不同4.对指针的操作不同c++里面,typedef和# define在一些人的眼中,是功能非常相似的两个关键字。但是它们之间又有哪些不同呢?1.执行时间不同#define 是在预处理阶段,也就是在编译之前typedef是在编译阶段2.作用域不同#define无论在哪定义过,在其他地方都可以使用typedef只能在...原创 2019-09-26 18:32:16 · 3202 阅读 · 0 评论 -
第一节:C++面向对象
c和c++的区别、OPP、this指针1.c和c++的区别?答:虽然c++主要时以c为基础发展起来的一门语言,但是它不是c的替代品,更不时c的升级版,c++和c时兄弟关系,没有谁比谁先进的说法。c和c++在头文件的引用以及main函数的形式方面都有一些差别。2.怎么理解OOP?怎么用OOP来解决问题?3.面向对象的(三)四大特征?(抽象)、封装、继承、多态。4.类只是实体的抽象说明。...原创 2019-02-16 21:31:57 · 177 阅读 · 0 评论