![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 79
Jiaxxxxxx
不被定义,庆幸自由,做一个有智慧有温暖的研发攻城狮。
展开
-
函数参数传递机制
函数参数传递机制1 函数参数传递机制2 值传递、址传递和引用传递的区别2.1 功能上2.2 传递效率上2.3 执行效率上2.4 类型安全上2.5 参数检查上2.6 灵活性上3 函数传递该用指针还是引用1 函数参数传递机制函数参数传递机制问题本质上是调用函数和被调用函数在调用发生时进行通信的方法问题。基本的参数传递机制有两种:值传递和引用传递。在值传递过程中, 被调用的函数(简称被调函数)的形式参数(简称为形参)作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由调用其他函数的函数(简称为主调函原创 2022-03-23 22:39:41 · 1704 阅读 · 1 评论 -
避免使用宏#define定义常量
避免使用宏#define定义常量1 前言2 使用const而不是#define定义常量3 总结1 前言C/C++预处理器提供了一系列的编译指令,通常,C++惯例是使用这些编译指令来惯例编译过程。例如,#include编译指令是管理程序文件的重要组件其他编译指令(#ifndef和#endif)使得能够控制是否对特定的代码块进行编译#pragma编译指令使得能够控制编译器特定的编译选项这些都是非常有帮助的工具,但使用#define编译指令时要谨慎。2 使用const而不是#define定义常原创 2022-03-20 09:12:47 · 1397 阅读 · 0 评论 -
size_t数据类型的意义
size_t数据类型的意义1 `int`的各种类型和`size_t`类型2 size_t类型的意义3 总结4 参考1 int的各种类型和size_t类型数据类型特别是int相关的类型(int,long, long long)在不同位数系统下长度不同,如下所示,特别是long数据类型,在不同平台下字节数就不一样,为了保证平台的通用性,程序中尽量不要使用long数据类型。//32位系统char 1个字节8位short 2个字节16位int 4个字节32位long 4个字节long long 8个原创 2022-03-19 20:15:18 · 2404 阅读 · 1 评论 -
static关键字用法
static关键字用法1 static关键字2 为什么要引入static3 C/C++中static的作用4 C++中static的用法4.1 面向过程设计中的static4.1.1 静态全局变量4.1.2 静态局部变量4.1.3 静态函数4.2 面向对象程序设计中的`static`(类中的`static`关键字)4.2.1 静态数据成员4.2.2 静态成员函数1 static关键字2 为什么要引入static我们知道在函数内部定义的变量,当程序执行到它的定义处时,编译器为它在栈上分配空间,函数在栈上原创 2022-03-16 23:16:26 · 604 阅读 · 0 评论 -
C++内存分配
C++内存分配和static关键字用法1 内存分配方式2 堆和栈的区别3 尽量少使用全局变量4 static关键字4.1 为什么要引入static4.2 C/C++中static的作用4.3 C++中static的用法4.3.1 面向过程设计中的static4.3.1.1 静态全局变量4.3.1.2 静态局部变量4.3.1.3 静态函数4.3.2 面向对象程序设计中的`static`(类中的`static`关键字)4.3.2.1 静态数据成员4.3.2.2 静态成员函数1 内存分配方式在C++中,内存分原创 2022-03-16 23:08:38 · 2079 阅读 · 0 评论 -
`LINK : fatal error LNK1104: 无法打开文件“***.dll”`的问题解决
问题描述: 我在编译动态链接库的项目时候,就报了如下的错误:LINK : fatal error LNK1104: 无法打开文件“..\bin\InitProject.dll”而InitProject.dll就是我目前需要输出的,但是却报无法打开该动态链接库错误。问题分析: ..\bin路径下已经有了InitProject.dll,如果重新进行编译,则会把之前的InitProject.dll删掉,再重新生成一个InitProject.dll。如果无法打开该动态链接库,会不会是因为其他程序占用了该动态原创 2022-03-15 21:10:11 · 7891 阅读 · 1 评论 -
指针变量未初始化导致程序崩溃
问题描述: 在功能自测的时候发生程序崩溃,在调试的过程将问题定位到崩溃是在操作指针的地方。代码示例如下:if (ptr != nullptr){ delete ptr; ptr = nullptr;}崩溃在ptr = nullptr;这一行代码上,而我前面定义了该指针int* ptr;并未对其进行new相关的操作和初始化,那既然ptr并不是nullptr,那为何delete该指针后会导致程序崩溃呢?原因分析: delete指针操作只是释放指针原本所指的内存,并没有删除该指针,如果该指针没有进原创 2022-03-15 21:07:40 · 1638 阅读 · 0 评论 -
C++文件操作和文件流
C++文件操作和文件流1文件的概念2 文件流的分类2 打开文件2.1 通过类对象调用`open`函数打开一个文件2.2 通过类对象构造函数打开文件3 关闭文件4 读写文件4.1 文本文件的读写4.2 二进制文件的读写1文件的概念根据文件中数据的组织方式,可以将文件分为文本文件和二进制文件。文本文件:又称字符文件或ASCII文件,它的每一个字节放一个ASCII代码,代表一个字符。二进制文件:又称内部格式文件或字节文件,是把内存中的数据按其在内存中的存储形式原样输出到磁盘中存放。比如:数字 64原创 2022-03-10 20:47:16 · 2624 阅读 · 0 评论 -
DLL导出函数和类
1 基本概念1.1 动态链接库库是写好的现有的,并且可以复用的代码。现实开发中每个程序都要依赖很多基础的底层库,不可能每个功能都从零开始开发,因此库是必须存在的。库的本质是一种可执行的二进制文件,可以被操作系统加载到内存中执行,库有两种:静态链接库(简称为静态库)和动态链接库(简称为动态库),所谓静态、动态是指链接,一个程序编译成可执行文件步骤如下图所示:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FgwmgSGt-1646739553600)(img\编译过程.PN原创 2022-03-08 19:39:49 · 5556 阅读 · 0 评论 -
智能指针shared_ptr的原理、用法和注意事项
智能指针shared_ptr的原理、用法和注意事项1 前言2 shared_ptr原理3 share_ptr的基本用法3.1 初始化3.2 获取原始指针3.3 指定删除器4 使用share_ptr需要注意的问题1 前言在实际的C++开发过程中,我们经常会遇到诸如程序运行中突然崩溃、程序运行所用的内存越来越多最终不得不重启等问题,这些问题往往都是内存管理资源不当造成的。比如:①有些内存资源已经释放,但指向它的指针并没有改变指向,最终称为了野指针,并且后续还在使用;②有些内存资源已经被释放,后期又试图再原创 2022-03-05 19:52:25 · 8120 阅读 · 0 评论 -
【c++】如何让一个对象只在栈(堆)上分配内存
在c++中,类的对象建立分为两种,一种是静态建立,比如A a;另一种是动态建立,比如A* ptr = new A;这两种方式是有区别的。静态建立类对象: 是由编译器为对象在栈空间中分配内存,通过移动栈顶指针挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。这种方式是直接调用类的构造函数。动态建立类对象: 是用new关键字将对象建立在堆空间上,这个过程分两步走。首先是执行 operator new() 函数,在堆空间上搜索合适的内存并分配;第二步是调用构造函数构造对象,初始化这片原创 2022-02-24 20:47:33 · 2797 阅读 · 3 评论 -
C++ delete指针需置空
delete指针之后,一定要给指针赋值为空,不然会引起程序崩溃。T* p = new T();delete p;// ...p->func(); // crashif (p) { p->func(); // crash too}以上代码,因为指向的内存已经被释放,导致后面的调用失效,这种情况导致程序崩溃的原因会非常难找,而且出错的位置很难定位,开发时往往还容易遇到很多这种情况。那么delete到底做了什么动作呢?delete指针只是释放了那个指针原本所指的内存而已,并没原创 2022-02-23 23:42:16 · 7027 阅读 · 3 评论