c++部分
ChasonPc
-
展开
-
c++多线程交替打印AB
#include <thread>#include <iostream>#include <mutex>#include <condition_variable>using namespace std;mutex data_mutex;condition_variable data_var;bool flag = true; void printA(){ while(1) { this_thread::原创 2020-08-04 21:26:03 · 741 阅读 · 0 评论 -
c/c++实现一个strcpy
char *Mystrcpy(char* res, const char* str){ assert(res != NULL && str != NULL); //断言,如果返回值为假,则程序终止。 if(res== NULL || str == NULL){ return NULL; } if(res == str){ return res; } int i = 0; while(str[i] != '\0'){ res[i] = str[i.原创 2020-07-28 08:38:16 · 97 阅读 · 0 评论 -
c++实现一个栈
#include <iostream>using namespace std; template<class T>class ArrayStack{public: ArrayStack(); //构造函数 ~ArrayStack(); //析构函数 void push(T t); T }int mian(){ return 0;}...原创 2020-04-10 14:33:46 · 621 阅读 · 0 评论 -
野指针和内存泄漏
1、内存泄漏访问已经释放的内存访问没有权限的内存2、野指针指向内存被释放的内存或者没有访问权限的内存的指针(1)野指针形成的三个主要原因指针变量没有初始化。指针p被free或者delete之后,没有被置为NULL。指针操作超越了变量的作用范围。(2)如何避免野指针对指针进行初始化指针用完后释放内存,将指针赋值NULL...原创 2019-09-27 16:19:04 · 152 阅读 · 0 评论 -
const关键字的作用
(1)防止被修饰的成员的内容被改变。(2)修饰类的成员函数时,表示其为一个常函数,意味着成员函数将不能修改类成员变量的值。(3)在函数声明时修饰参数,表示在函数访问时参数(包括指针和实参)的值不会发生变化。(4)对于指针而言,可以指定指针本身为const,也可以指定指针所指的数据为const,const int *b = &a或者int* const b = &a修饰的都是后...原创 2019-09-26 14:52:51 · 226 阅读 · 0 评论 -
static关键字的作用(有三个作用)
(1)具有隐藏的作用 当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。(2)保持变量内容的持久 存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围,说到底static还是用来隐藏的。虽然这种用法不常见 PS:如...原创 2019-09-26 14:52:11 · 8952 阅读 · 0 评论 -
函数参数的传值,传地址,传引用的区别
(1)值传递:会为形参重新分配内存空间,将实参的值拷贝给形参,形参的改变不会影响实参的值,函数被调用结束后,形参被释放。(2)地址的传递:形参为指针变量,将实参的地址传递给函数,可以在函数中改变实参的值。调用时为形参指针变量分配内存,结束时释放指针变量。(3)引用传递:不会为形参重新分配内存空间,形参只是实参的别名,形参的改变只会影响实参的值,函数调用结束后,形参不会被释放。...原创 2019-09-26 14:51:39 · 1896 阅读 · 0 评论 -
引用和指针有什么区别
本质:引用是别名,指针是地址。具体的:①从现象上看,指针在运行时可改变其所指向的值,而引用一旦和某个对象绑定后就不在改变。这句话可以这样理解:指针可以被重新赋值以指向另一个不同的对象。但是引用总指向在初始化时被指定的对象,以后不能改变,但是指定的对象内容可以改变。②从内存上分配看,程序为指针变量分配内存区域,而不用为引用分配内存区域,引用声明时必须初始化,从而指向一个已经存在的对象,引用不能...原创 2019-09-26 14:49:40 · 96 阅读 · 0 评论 -
new和malloc区别
特征new/deletemalloc/free分配内存位置自由存储区堆内存分配成功返回值完整类型指针void*内存分配失败返回值默认抛出异常返回NULL分配内存的大小由编译器根据类型计算得出显示指定所需内存的尺寸处理数组有处理数组的new版本new[]需要用户计算数组的大小后进行内存的分配已分配内存的扩充无法直观的处理使用...原创 2019-09-12 14:45:51 · 97 阅读 · 0 评论 -
C++成员函数的重载、覆盖、隐藏区别
一、重载与覆盖 成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。 覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual 关键字。二、隐藏规则 这里“隐藏”是指派生类的函数屏蔽了与其同名的基类函数...原创 2019-09-12 14:44:54 · 111 阅读 · 0 评论 -
四种xxx_cast类型转换
一、static_cast用于非多态类型之间的转换,不提供运行时的检查来确保转换的安全性。主要有如下:1、基本数据类型转换2、nt转换成enum3、基类和子类之间指针和引用的转换上行转换,把子类的指针或引用转换成父类,这种转换是安全的(通常使用默认转换)。下行转换,把父类的指针或引用转换成子类,这种转换是不安全的,也需要程序员来保证(通常使用dynamic_cast)。二、co...原创 2019-09-12 08:42:02 · 450 阅读 · 0 评论 -
C++11的新特性
1、类型说明符auto 和只对应一种特定类型的说明符(int、double等)不同,auto用于从初始化表达式中推断出变量的数据类型。因此,auto定义的变量必须有初始值。2、类型说明符decltype decltype的作用是选择并返回操作数的数据类型。编译器会分析表达式并得到它的类型,但是不会去计算表达式的值。如果decltype使用的是一个不加括号的变量,得到的就是该变量的类型。如...原创 2019-09-12 08:41:11 · 98 阅读 · 0 评论 -
C++智能指针的内存泄漏和解决方法
1、智能指针有没有内存泄露的情况?答:当两个对象同时使用一个shared_ptr成员变量指向对方,会造成循环引用,使引用计数失效,从而导致内存泄露。2、智能指针的内存泄漏如何解决?答:为了解决循环引用导致的内存泄漏,引入了弱指针weak_ptr,weak_ptr的构造函数不会修改引用计数的值,从而不会对对象的内存进行管理,其类似一个普通指针,但是不会指向引用计数的共享内存,但是可以检测到所管...原创 2019-09-11 22:32:16 · 1662 阅读 · 0 评论 -
C++字符串的连接实现
#include <iostream>using namespace std;void myStringLink(char* head, char* tail){ while(*head) *head++; while(*head++ = *tail++);}int main(){ char head[20] = "Hello "; char tail[10] = ...原创 2019-09-11 17:34:23 · 2049 阅读 · 2 评论 -
C++快慢指针的应用
快慢指针快慢指针中的快慢指的是移动的步长,即每次向前移动的快慢,例如每次可以让快指针沿链表向前移动2,慢指针向前移动1次。快慢指针的应用(1)判断单链表是否存在环 如果链表是一个环,就好像操场的跑道是一个环一样,此时快慢指针都从链表头开始遍历,快指针每次向前移动两个位置,慢指针每次向前移动一个位置;如果快指针到达NULL,说明链表以NULL为结尾,没有环。如果快指针追上慢指针,则表示...原创 2019-09-10 16:06:55 · 959 阅读 · 0 评论 -
C++五大内存分区
在C++中,内存分为5个区,从上到下依次是栈、堆、自由存储区、全局/静态存储区和常量存储区。1、栈编译器在需要的时候分配,在不需要的时候自动清除的变量存储区。里面的变量通常是局部变量、函数参数等。2、堆由new分配的内存块,他们的释放编译器不去管,由应用程序区控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么程序结束后,操作系统自动回收。3、自由存储区由...原创 2019-09-04 11:34:50 · 537 阅读 · 0 评论 -
C++智能指针用法及实现
1、智能指针有没有内存泄露的情况?答:当两个对象同时使用一个shared_ptr成员变量的指向对方,会造成循环引用,使引用计数失效,从而导致内存泄露。2、智能指针的内存泄漏如何解决?答:为了解决循环引用导致的内存泄漏,引入了弱指针weak_ptr,weak_ptr的构造函数不会修改引用计数的值,从而不会对对象的内存进行管理,其类似一个普通指针,但是不会指向引用计数的共享内存,但是可以检测到所...原创 2019-08-19 10:11:19 · 262 阅读 · 0 评论