
c++
优秀的邓宗磊
这是一个优秀的人呢
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
c++,bind()用法,将仿函数,函数指针,结合参数,组合成统一的function<>可调用对象,以便于使用容器管理
c++,bind()用法,将函数,参数,组合成可调用对象:之前在可调用对象的文档中提到过bind()函数的作用是生成一个可调用对象,现在说bind的具体用法。bind()用于将函数和参数绑定在一起,形成一个可调用对象,这里使用function<void>验证和管理bind生成的可调用对象。用法:bind()接收参数,1、第一个参数是函数地址,1.1、全局函数的地址是函数名,1.2、类静态成员函数的地址是&类名::类成员函数名,1.3、类普通成员函数的地址是&类名:原创 2021-12-11 22:00:12 · 328 阅读 · 0 评论 -
c/c++两种语言不同的连接性:extern “C“;extern “C++“
c/c++两种语言不同的连接性,extern “C”;extern “C++”:c++中不可以直接使用c函数,c中也不可以直接使用c++;知识前提:链接程序要求每个不同的函数都有不同的符号名。c语言中,一个名称只对应一个函数,C语言编译器会将spiff这样的函数名翻译为_spiff,此为C语言连接性。c++中,函数重载使得一个名称可以对应多个函数,对函数名的翻译会加上其参数种类,可能将spiff(int)转换为_spiff_i或者_spiff_int,将spiff(double,double)翻译为原创 2021-11-29 21:17:57 · 395 阅读 · 0 评论 -
c++,函数与连接性,编译单元:
c++,函数与连接性,编译单元:c++中变量和函数均具有连接性,c++中不允许函数内定义函数,所有的函数的存储都是静态的,在整个程序执行期间都存在,默认情况下,函数的连接性是外连接,可以在文件间共享,不过和全局非静态变量相同,函数在不同编译单元的文件中想要被调用,需要使用extern进行声明。编译单元:编译器从一个cpp文件开始,依次替换其所有的包含文件,直至cpp文件与所有其包含的文件全部被整合为一个文件,然后编译器开始编译被整合的文件,这样一个大的文件就是一个编译单元,变量与函数的声明和定义可以不原创 2021-11-29 21:14:47 · 396 阅读 · 0 评论 -
c++,命名空间namespace,using编译,using声明用法
c++,命名空间namespace,using编译,using声明用法命名空间namespace命名空间起源:因为项目增大导致命名冲突,使用厂商的类库时命名冲突,用户定义时命名冲突等统称为名称空间问题,c++提供了命名空间工具来方便控制名称的作用域,需要注意的是命名空间是用来控制名称标识符的作用域的。了解命名空间前需要的知识前提:声明区域:可以在其中进行声明的区域,例如函数外声明的全局变量,其声明区域为所在文件,对于函数内声明的变量,其声明区域为其声明所在的代码块。潜在作用域:变量的潜在作用原创 2021-11-29 21:12:30 · 1134 阅读 · 0 评论 -
c/c++连接性:内连接,外连接,无连接,关键字static使外连接变成内连接。
c/c++连接性:内连接,外连接,无连接,关键字static使外连接变成内连接,编译报链接错误。编译时出现链接错误:常常是内链接的变量使用外连接的用法。连接性:描述标识符如何在不同单元中共享,容易与作用域概念混淆。如果一个标识符可以在其他编译单元中或者在定义它的编译单元中的其他范围内被调用,它就是外连接的,是能被其他单元的文件访问的,外连接的标识符需要分配运行时的存储空间,因为要保证其随时可以被调用。例如:函数定义体是外连接的,没有static修饰全局变量,在其他文件中使用extern声明后原创 2021-11-29 21:06:08 · 752 阅读 · 0 评论 -
c++,变量作用域
c++,变量作用域作用域:变量对程序而言的可见范围称为变量的作用域。c/c++的作用域规则:1、作用域指一个标识符能够起作用程序范围。2、标准c语言中的范围包括文件,函数,程序块,函数原型。3、c++中除了包括上述四种,还包括类和命名空间,命名空间还可以跨文件。标号的特点:1、标号(label)是具有函数作用域的唯一一种标识符。2、不管标号的定义在函数的那一行上,或者在函数中嵌套了多少层程序块,它都可以在函数体内的任何一个地方访问到,因此叫做函数级标识符。3、标号一般和goto语句配合使原创 2021-11-29 20:52:01 · 1162 阅读 · 0 评论 -
c语言下,对象存储类型和存储持续性,对象生存期限(生命周期)
c语言下,对象存储类型:任何可执行程序最终会变成一系列机器指令和数据(恰好对应了数据结构和算法),在将一个程序的源代码转换成机器执行指令的过程中,一些程序元素会被剔除,另一些程序元素则保留在可执行代码中。被保留的程序会占用可执行程序一部分的存储空间,不同的出现元素在运行使得存储方式不同,引出了“存储类型”的概念。存储类型和存储持续性:c语言中为变量,常量,函数等定义了4中存储类型。分别是extern,auto,static,register,它们分别用一个关键字(存储类型说明符)来说明。存储持续性原创 2021-11-28 15:45:37 · 1385 阅读 · 1 评论 -
c++变量的声明和定义,变量外连接特点的使用方法,extern声明变量,单定义原则
c++变量的声明和定义,变量外连接特点的使用方法,extern声明变量,单定义原则:变量的声明和定义并没有函数的声明与定义那么常见,但全局变量发挥其外连接的特性,是需要结合其声明和定义的结合使用的。变量的定义+声明:int i;int i = 10;extern int i = 10;这三种写法都是定义+声明写法,简称定义,特点是:为该变量分配了存储空间。变量的声明:extern int i;变量声明必须使用extern关键字和不使用赋值号,就是声明写法,简称声明,特点是:没有为该变量原创 2021-11-28 15:32:24 · 384 阅读 · 0 评论 -
c++,cv限定符,const设置为程序不可改,mutable补充const,volatile设置为易变禁优化
cv限定符:const,volatileconst:表示内存被初始化后,程序不能对它进行修改,这表示当前进程不能对其修改,但不代表其本身不会被硬件会其他东西修改。c++中的const关键字会将外连接的全局变量的连接性转变成内连接,效果就像加了个static。volatile:表示即使程序没有修改内存,内存也可能发生变化,例如:1、使用指针指向某个硬件位置,其中包含了来自串行端口的时间和信息,这种情况硬件会修改内存的信息2、该关键字的作用是为了改善编译器的优化能力,(1)假设编译器发现,程序在几原创 2021-11-28 15:26:06 · 233 阅读 · 0 评论 -
c++11类中数据元素,初始化列表,构造并初始化,初始化列表优先级高于构造并初始化
c++11类中数据元素,初始化列表,构造并初始化,定义时使用赋值,初始化列表优先级高于构造并初始化:定义时初始化:一个变量在定义后不加分号立刻使用赋值号赋值的操作,称作定义时初始化,调用值构造函数或拷贝构造函数,例如://这个称为定义时初始化,用值10初始化i的值,调用的是int类的值构造函数。int i1 = 10;//这个也是定义时初始化,用int型数据i1初始化i2,调用的是int类的拷贝构造函数。int i2 = i1;一个变量在定义后没有立刻紧跟赋值运算符进行初始化,而是后接分原创 2021-11-28 15:19:53 · 501 阅读 · 0 评论 -
c++,可调用对象的统一管理,function类模板
c++,可调用对象的统一管理,function类模板:翻译:统一管理的意思,就是需要将一堆拥有某个或某些共同属性的对象放到一个容器中,方便日后的调用,因此可调用对象的统一管理的意思,就是要把可调用对象放在一个容器中。之前讲过可调用对象分为函数指针,仿函数(重载了调用运算符的类),lambda表达式,但lambda表达式本身随写随用,少有用函数指针调用的情况,故只谈函数指针和仿函数的统一管理。函数指针的写法:int (*func1)(int,int);仿函数的写法:class Func{p原创 2021-11-28 15:11:30 · 360 阅读 · 0 评论 -
调用运算符,小括号(),与可调用对象,函数,函数指针,仿函数等
调用运算符,小括号(),与可调用对象,函数,函数指针,仿函数等开头举例,可调用对象:void func(){ return;}void func2(){ func();}这里函数func2调用了函数func,函数func就是一个可调用对象,函数func是通过调用运算符()触发调用的。可调用对象:可以通过调用运算符()进行函数调用的对象。函数属于可调用对象,还包括函数指针,仿函数,lambda表达式,这里主要分享函数指针和仿函数。函数指针包括了:全局函数指针,类成员函数指针,原创 2021-11-28 14:33:32 · 1886 阅读 · 0 评论 -
c/c++中的文件操作下的底层操作,文件控制模块FCB与数组,文件数据固定时因解释不同而效果不同
c++中的文件操作的底层操作:文件操作属于一种I/O,它并不是c/c++语言的组成部分,是通过标准的I/O函数库来实现的。操作系统眼中,设备也是文件,例如:键盘是字符设备文件,磁盘是块设备文件等。内存中的任何对象都可以看做是由一些字节序列组成的实体,计算机并不知道某个对象在实际应用中代表的含义,所有的对象都是内存空间和值。读写文件的操作:当程序员将内存中的字符串对象或者二进制对象写入到磁盘中时,计算机只是把它们的内存映像,就是值复制到磁盘文件中。从磁盘文件中读取数据到内存中时,不论字符串数据还原创 2021-11-28 14:30:09 · 802 阅读 · 2 评论 -
c++代码调试,宏调试,assert报错弹框
调试宏assert:报错弹框,终止,重试,还是忽略?重试。assert断言语句指定了程序中的某个点期望为TRUE的条件,若该条件不为TRUE,则断言失败,程序中断,显示断言失败弹框。这是一种很有效的调试与错误诊断方法,可以在程序运行时发现问题,帮助定位错误,使调试更高效,同时断言对代码本身没有影响,因为它是宏而不是函数。如图弹出的错误框意味着bug即将被发现,可以通过重试按钮,找到代码出错的地方,然后进行排查。函数走到了断言处,还未开始进行断言。按下f11运行断言便报出弹框,就可以通过断言中判原创 2021-11-13 14:52:12 · 2458 阅读 · 0 评论 -
c++编程中超级容易大意犯错,好在书中已有总结
防范c++编码过程中因粗心大意而产生的错误:1、视觉上不容易区分的操作符书写错误,==,<=,&&,||等符号发生少写一个的情况。2、变量被创建后应当及时初始化,防止为初始化的变量成为右值。3、小心变量的初值,缺省值错误或精度不够。4、避免隐式数据类型转换发生错误,尽量显式进行类型转换。5、小心变量向上或向下溢出,数组越界。6、记得编写错误处理程序以及错误处理程序无误。7、小心文件I/O有误。8、避免编写技巧性很高的代码,不然以后自己和别人怎么看?9、不必设计面面俱到原创 2021-11-11 22:01:16 · 469 阅读 · 0 评论 -
C++中const关键字作用之一,提高函数的健壮性
C++中const关键字作用之一,提高函数的健壮性使用const提高函数的健壮性:const可用于修饰函数参数,返回值,函数定义体,被const修饰的东西都受到强制保护,用来预防意外的变动。const修饰函数的参数:1、如果参数是用来被输出的,就不能用const修饰参数了。2、当参数作为输入时,加const修饰可以防止意外改动该参数。例如:void StringCopy(char strDestination, const char strSource);strSource是输入参数,str原创 2021-11-11 21:59:29 · 538 阅读 · 0 评论 -
类的继承与组合的思路建议
类的继承与组合的思路建议类的继承和组合:类之间的关系是继承还是组合取决于业务逻辑上类之间的关系,选择应该是基于业务逻辑,而非功能恰好相同或偶尔需要。在设计模式中的博文里有对继承和组合等类之间耦合关系的讲解,此处只有简单的建议。继承的建议:1、豪不相关的两个类不应该因为想要让某个类功能多一点而继承另一个类。2、逻辑上如果b是a的一种,并且a的所有功能和属性对b有意义,那么b允许继承a的功能和属性:牛奶是饮料的一种,男人是人的一种;圆不能算椭圆的一种。组合的建议:1、逻辑上a是b的一部分,则不允原创 2021-11-11 21:54:54 · 133 阅读 · 0 评论 -
c++函数内联,inline关键字,使用要点
c++函数内联,inline关键字,使用要点函数内联:c++语言支持函数内联,目的是为了提高函数的执行效率(速度)。c程序中可以使用宏代码提高程序执行效率,宏代码本身不是函数,使用起来像函数,预处理器使用复制宏代码的方式代替函数调用,省去了函数压栈、生成汇编语言的call调用、返回参数、执行return等过程,从而提高了速度,缺点是容易出错。对c++而言宏代码还有一种缺点:没办法调用类的私有数据成员。c++中函数内联的工作方式:对于任意内联函数,编译器在符号表里放入函数的声明(名字,参数类型,返回原创 2021-11-11 21:45:33 · 233 阅读 · 0 评论 -
c++中运算符重载的注意点
c++中运算符重载的注意点运算符重载:使用关键字operator加上运算符来表示函数,叫做运算符重载。例如两个复数相加的函数:Complex Add(const Complex &a, const Complex &b);Complex operator +(const Complex &a, const Complex &b);class Complex{public: Complex(int AValue, int BValue):m_iAvalue(A原创 2021-11-11 21:39:53 · 722 阅读 · 0 评论 -
c/c++函数参数的缺省值使用要点:
c/c++函数参数的缺省值使用要点:函数与缺省值用例:声明:void func(int ivalue = 1, string str = “”);//声明中给参数给了默认值定义:void func(int ivalue, string str)//定义时没有缺省值了{//function}使用场景:有一些参数的值在每次函数调用时都相同,采用参数的缺省值可以是书写变得简洁,编译时,缺省值由编译器自动插入。建议(规则):1、参数缺省值只能出现在函数的声明中,而不能出现在定义体中。例如:原创 2021-11-11 21:25:48 · 2528 阅读 · 1 评论 -
c++,类成员函数的重载,覆写,隐藏,它们的关系和区别
c++类成员函数的重载,覆写,隐藏,关系和区别类成员函数重载的特点:1、相同的作用域,同一个类中。2、函数名字相同。3、函数参数不同。4、virtual关键字可有可无,因为重载靠的是函数标识符。类成员函数重载,相同的函数名对应不相同的参数,作用域一样。类成员函数覆写的特点:1、不同的作用域,分别位于基类与子类。2、函数名字相同。3、参数相同。4、基类函数必须有virtual关键字,子类可有可不有,没有的话编译器会自动加上virtual。子类覆写了基类的所有函数,对应函数和参数均相原创 2021-11-07 19:29:06 · 355 阅读 · 0 评论 -
c++函数的高级特性:重载,c++函数标识符,extern “C“的用处
c++函数的高级特性:重载重载和内联可以可用于全局函数和类成员函数;重载:将语义,功能相似,作用域相同的几个函数用同一个名字表示。c++中类的构造函数需要重载机制。重载的实现方法:函数名称相同,参数不完全相同,参数可能在种类,数量,顺序上等有所不同,在参数完全相同而返回值不同的情况下,编译器就不知道该调用哪个,所以这是一种二义性,而不是重载。编译器根据参数为每个重载函数产生不同的内部标识符,例如:void eat(beef bvalue)的标识符为_eat_beef或别的风格,依据编译器的原创 2021-11-07 19:13:20 · 478 阅读 · 0 评论 -
c++中malloc/free,new/delete使用要点
malloc/free,new/delete使用要点:malloc的函数原型:void * malloc(size_t size);使用malloc申请一块长度为length的整数类型的内存:int *p = (int *) malloc(sizeof(int) * length);特点:1、malloc返回值类型是void *,所以在调用malloc时要显式的进行类型转换,将void *类型转换成所需要的指针类型。2、malloc函数只关心内存的字节数而不关心申请内存的类型,在记不住或者无法原创 2021-11-07 19:09:43 · 267 阅读 · 0 评论 -
内存耗尽和处理方式,指针为NULL的情况,内存分配失败
内存耗尽和处理方式,指针为NULL的情况,内存分配失败堆内存耗尽和处理方式:如果在申请动态内存时找不到足够大的内存块,malloc和new都会返回空指针宣告内存申请失败。因此只需要用if(NULL == p)判断一下就可以知道指针是否申请到了内存,然后进行处理,1、是返回当前函数并做出提示,2、是写入日志并终止进程(exit(1)语句),3、设置异常处理函数等。方法1、2很常见,但方法1在函数需要申请多个内存时不好用,因为函数返回以后之前申请成功的内存因失去控制而泄露,故应使用方法2。在实际原创 2021-11-07 18:44:53 · 1559 阅读 · 0 评论 -
野指针,new/delete,malloc/free混用带来的后果
野指针,new/delete,malloc/free混用带来的后果野指针:野指针不是Null指针,是指向“垃圾”内存的指针。(一般是个乱码)其内存空间被释放,但该指针的指向没有改变,仍然指向该片内存空间的首地址,若因失误而访问该指针的内存,进程就会报错崩溃。野指针仍然指向原先的内存地址,而不是指向Null,所以用if(NULL == p)对野指针是没有作用的。指针在创建的同时应该被初始化,要么设置为空,要么指向合法内存(已经被进程从堆空间或栈空间申请到的内存)。野指针出现的原因:1、指针变量未原创 2021-11-07 18:40:41 · 1107 阅读 · 0 评论 -
动态内存申请与释放,new/delete,malloc/free的功能。
动态内存申请与释放:new和malloc的功能:malloc是从堆空间申请指定数额的内存空间给当前进程。new在malloc的基础上,申请内存空间后调用对象的构造函数。free和delete的功能:free是将当前进程中从堆空间申请的内存中不需要的部分退还给堆空间,称为释放内存从进程释放到堆空间。delete是在用free释放当前对象之前,调用该类的析构函数。这四个关键字都需要和指针变量结合使用,需要有一个指针变量来指向被申请或被释放的内存。动态分配内存的过程中,需要在栈空间申请一个四字节内原创 2021-11-07 18:37:31 · 869 阅读 · 0 评论 -
c++,数组与指针的差别
c++中指针与数组的区别:数组只能在静态存储区被创建(全局数组),或在栈上创建(临时数组);数组名对应一块内存,其地址和容量在生命周期内保持不变,只有内容可改变。指针可以随时指向任意内存的内存块,特征是“可变”。数组和指针修改内容时的不同:char a[] = “hello”;a[0] = ‘X’;//这个没问题。这段语句表示:创建一个字符串并赋值为hello,修改字符串的第一个字符,没有问题。char *p = “hello”;p[0] = ‘X’;//这是个错误,有的编译器可能发现不了原创 2021-11-07 16:19:07 · 769 阅读 · 0 评论 -
编码笔记,内存管理方式,动态内存分配
内存管理:内存的分配方式:1、静态存储区:内存在编译时已经分配好,在整个程序的运行器件都存在。如:全局变量,static变量。2、栈上分配:执行函数时,函数内局部变量的储存单元后可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置与处理器的指令集中,效率很高但内存容量有限。3、堆上分配:也叫动态内存分配。程序运行时使用new或malloc申请任意大小的内存,程序员自己负责使用free或delete释放内存。动态分配内存的生命周期由程序员决定,非常灵活,问题和坑最多。常见原创 2021-10-28 22:09:34 · 165 阅读 · 0 评论 -
指针和引用的比较
指针与引用的比较:int m;int &n = m;引用n相当与对象m的别名(绰号),对n的操作就是对m的操作,既不是拷贝也不是指针,n就是m。引用的规则:1、引用被创建的同时就必须被初始化,指针可随时初始化。2、引用没有Null引用,引用必须与合法的储存单元关联,指针可为Null3、引用被初始化后无法改变其引用关系,指针则可以随便修改指向的内存。引用的功能:传递函数的参数和返回值。引用传递的性质像指针传递,但使用方式像值传递,引用传入相比值传入有指针传入的优点:功能十分强大,原创 2021-10-28 22:08:31 · 637 阅读 · 0 评论 -
编码笔记,断言,程序版本,debug和release
断言:程序一般分为debug版本和release版本,debug版本用于内部调试,release版本用于发行给用户使用。断言assert时只在debug版本中起作用的宏,用于检查“不应该”发生的状况,运行中assert的参数如果为假,程序就会终止,一般还会出现提示对话,说明声明地方引发了assert。例子:#define void func(){assert(true);assert(false && true);}程序员可以吧assert看出是一个在任何系统状态下都可以原创 2021-10-28 22:07:26 · 279 阅读 · 0 评论 -
编码笔记,函数的设计,参数,返回值,函数体
函数设计:函数作为程序基本功能单元,其接口设计和内部实现的规则十分重要。函数接口双要素:参数与返回值。参数的建议(规则):1、参数需完整,不可懒惰只写类型不写名称,无参数则用void填充如:void SetValue(int value); float GetValue(void);2、命名需恰当,顺序要合理拷贝函数StringCopy为例:两个参数需要命名区分源参数与目的参数,一般以目的参数在前,源参数在后。如:void StringCopy(char *strDestination, c原创 2021-10-28 22:05:01 · 248 阅读 · 0 评论 -
编码笔记,常量,const和#define
常量:程序中直接出现的数字与字符串会带来那些麻烦?1、程序可读性变差,程序员与用户均难以直接理解数字和字符的含义,来源;2、程序很多地方需要输入相同的字符串时,难以保证不出错,代码体量较大时,则会变成“必然出错”。3、当数字与字符串需要被修改时则需要同时在很多地方修改,难以维护,出错频繁。常量的定义方法:#define和const相互比较:const优与#define原因:1、const有数据类型,可被编译器进行类型安全检查并在其作为参数时提高安全性;宏常量只是字符替换,隐患明显。2、调试原创 2021-10-28 22:03:46 · 163 阅读 · 0 评论 -
编码笔记,循环语句的写法
循环语句:提高效率与降低复杂性c/c++中for使用频率最高,while其次,do少见建议:1、多重循环中,需尽可能将循环次数最多的循环放在最内层,将循环次数最少的放在最外层,减少CPU跨切循环层的次数以提高效率。2、如果循环体中存在逻辑判断且循环次数很大,宜将判断语句移到循环体外,因为在循环体中进行的判断打断了循环体的流水线作业,使得编译器不能对循环进行优化处理,降低了效率,如果循环次数非常大,则需要让循环体专心执行作业而将判断语句尽可能移出到循环体外部。for语句建议:1、不可在for循环原创 2021-10-28 22:02:22 · 223 阅读 · 0 评论 -
编码学习笔记,变量,类的命名规则
命名规则:1、直观可读,望文生义,最好用英文单词组合,切忌汉语拼音2、标识符:形容词+名词,“min_length && max_num”3、命名与所用的操作系统或开发工具保持一致,Windows采用大小写混排,AddChild,Unix采用小写加下划线,add_child,不混用4、程序中不要出现仅靠大小写区分的标识符5、程序中局部变量与全局变量标识符不应完全相同6、变量名应使用名词或名词+形容词,如float value;float oldValue;7、全局函数的名字应原创 2021-10-28 21:59:48 · 634 阅读 · 0 评论 -
编码学习笔记,空行,代码行,空格,对齐,拆分,修饰符,注释,类版式
优秀的程序版式:空行的作用:分割段落,使程序布局清晰,空行不会浪费内存,但打印时会多消耗纸张。建议:1、每一个类声明后,函数定义结束后都要加空行。2、函数体内,逻辑上密切相关的语句之间不加空行,其它地方则加空行。代码行:建议:1、一行代码做一件事情:定义一个变量;写一条语句;//写一条注释2、if、for、while、do等语句独占一行,执行语句不得紧跟其后,不论执行多少语句都要加{},防止书写失误。3、定义变量后立即初始化或在最近的地方初始化,防止忘记初始化带来程序错误(安全明原创 2021-10-28 21:58:27 · 1252 阅读 · 0 评论 -
编码笔记,c/c++文件结构
c/c++文件结构头文件:保存程序的声明源文件:保存程序的实现,即定义1。版权声明/******/头文件结构:三部分1、头文件开头处的版权和版本声明2、预处理快3、函数和类结构声明建议:1、为了防止头文件被重复引用,应使用ifndef/define/endif结构产生预处理块2、<>包含标准库头文件3、“”包含非标准库头文件4、头文件只存放声明不存放定义c++中类成员函数声明时定义会变成内联函数,书写方便但风格不一致,弊大于利,故无论函数体多小都建议将声明和原创 2021-10-28 21:55:35 · 278 阅读 · 0 评论 -
深浅拷贝,对象自身拷贝,c++实现
深浅拷贝,对象自拷贝,c++实现深拷贝,浅拷贝,自身拷贝是拷贝函数在实际使用过程中的各种情况与对应用法,在c++中,主要是应对需要拷贝指针时。深拷贝:将目标的内存拷贝了一份,一份变两份,彼此不相干。代码:Type* copy(Type* Avalue){ Type* demo = new Type(*Avalue); return demo;}浅拷贝:将目标指针指向的地址拷贝了一份,两个指针指向同一个地址,一变都变,而如果有一个delete了该内存,其他指针就全部变成了野指针(指向的地址原创 2021-10-17 21:03:49 · 343 阅读 · 0 评论 -
c/c++回调函数,定义,用法,函数指针赋值的方法,全局函数和成员函数赋值为函数指针
回调函数:通过函数指针由某个函数在特定场合下调用指针指向的函数,这个过程叫回调函数将函数的指针(地址)作为参数传递给另一个函数,当这个指针用来调用其所指向的函数时,便是回调函数。回调函数不由函数实现直接调用,而是在特定环境下由其他函数调用,用于对该事件或条件进行响应。场景:程序员不好手工调用某函数时,交给其他函数控制时机调用该函数。c/c++中回调函数的用法:1.定义一个函数void func(){cout<<"…"<<endl;}2.定义一个函数指针格式:返回原创 2021-10-01 21:40:03 · 1447 阅读 · 0 评论