c++编程
文章平均质量分 74
Michael-Tian
研究方向:深度学习、机器学习、异构计算
展开
-
智能指针shared_ptr的应用场景
智能指针shared_ptr的应用场景既然智能指针shared_ptr能够帮助我们对程序中的内存资源进行很好的管理,避免内存泄漏或者内存访问错误的发生,那么我们能不能在任何时候都使用它来管理程序中的内存资源呢?不能。shared_ptr增加了额外的引用计数而牺牲了一定的性能。C++ 智能指针底层是采用引用计数的方式实现的。简单的理解,智能指针在申请堆内存空间的同时,会为其配备一个整形值(初始值为 1),每当有新对象使用此堆内存时,该整形值 +1;反之,每当使用此堆内存的对象被释放时,该整形值减 1。转载 2022-05-29 21:29:38 · 1398 阅读 · 0 评论 -
C++11 shared_ptr智能指针
C++11 shared_ptr智能指针在实际的 C++ 开发中,我们经常会遇到诸如程序运行中突然崩溃、程序运行所用内存越来越多最终不得不重启等问题,这些问题往往都是内存资源管理不当造成的。比如:有些内存资源已经被释放,但指向它的指针并没有改变指向(成为了野指针),并且后续还在使用;有些内存资源已经被释放,后期又试图再释放一次(重复释放同一块内存会导致程序运行崩溃);没有及时释放不再使用的内存资源,造成内存泄漏,程序占用的内存资源越来越多。针对以上这些情况,很多程序员认为 C++ 语言应该提供转载 2022-05-29 20:55:19 · 365 阅读 · 0 评论 -
C++11 unique_ptr智能指针详解
C++11 unique_ptr智能指针详解作为智能指针的一种,unique_ptr 指针自然也具备“在适当时机自动释放堆内存空间”的能力。和 shared_ptr 指针最大的不同之处在于,unique_ptr 指针指向的堆内存无法同其它 unique_ptr 共享,也就是说,每个 unique_ptr 指针都独自拥有对其所指堆内存空间的所有权。这也就意味着,每个 unique_ptr 指针指向的堆内存空间的引用计数,都只能为 1,一旦该 unique_ptr 指针放弃对所指堆内存空间的所有权,则该空转载 2022-05-29 20:30:01 · 1937 阅读 · 0 评论 -
clion快捷键
clion快捷键编辑基本代码完成Ctrl + Space智能代码完成Ctrl + Shift + Space完成语句Ctrl + Shift + Enter显示参数信息Ctrl + P快速文档查找Ctrl + Q简短信息Ctrl +鼠标悬停在插入符号上显示错误的描述Ctrl + F1生成代码Alt + Insert覆盖/实现方法Ctrl + O / Ctrl + I用…环绕Ctrl + Alt + T带有行注释的原创 2021-09-01 09:31:40 · 1575 阅读 · 0 评论 -
win10 下搭建c++开发环境(CMake+MinGW+VSCode)
win10 下搭建c++开发环境(CMake+MinGW+VSCode)1、minGW安装mingw-w64 下载链接建议64位操作系统选择x86_64-posix-seh,下载后得到 x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z 文件,解压后得到 mingw64文件夹,copy该文件夹到安装目录即可,我一般放在 D:\Program Files\mingw64 路径下,然后配置环境变量,添加;path = D:\Program Files\min原创 2021-08-26 13:41:24 · 14153 阅读 · 1 评论 -
c++ 指针和引用的区别
c++ 指针和引用的区别1. & 和 * 符号的含义#include <iostream>using namespace std;int main(){ int a = 10; int* p; // int* 表示整型指针; *声明的时候表示指针 p = &a; // &a 表示取a的地址; &使用的时候表示取地址 // 以上代码也可以写成下面的形式: 定义指针的同时赋初值 int* p1 = &am原创 2021-08-25 12:37:02 · 253 阅读 · 0 评论 -
c++常量指针和指针常量的区别
c++常量指针和指针常量的区别常量指针#include <iostream>using namespace std;int main(){ int a = 10; int b = 100; // const 修饰指针称为常量指针 // 记法:const(常量)在 *(指针)之前称为 常量指针 const int* p = &a; cout << "*p: " << *p << endl;原创 2021-08-25 10:50:42 · 167 阅读 · 1 评论 -
C++用new和不用new创建类对象区别
C++用new和不用new创建类对象区别new创建类对象,使用完后需使用delete删除,跟申请内存类似。所以,new有时候又不太适合,比如在频繁调用场合,使用局部new类对象就不是个好选择,使用全局类对象或一个经过初始化的全局类指针似乎更加高效。一、new创建类对象与不new区别下面是自己总结的一些关于new创建类对象特点:new创建类对象需要指针接收,一处初始化,多处使用new创建类对象使用完需delete销毁new创建对象直接使用堆空间,而局部不用new定义类对象则使用栈空间new对象转载 2021-08-23 15:50:28 · 2340 阅读 · 0 评论 -
C++ 宏定义 #define 和常量 const 的区别
C++ 宏定义 #define 和常量 const 的区别类型和安全检查不同宏定义是字符替换,没有数据类型的区别,同时这种替换没有类型安全检查,可能产生边际效应等错误;const常量是常量的声明,有类型区别,需要在编译阶段进行类型检查编译器处理不同宏定义是一个"编译时"概念,在预处理阶段展开,不能对宏定义进行调试,生命周期结束与编译时期;const常量是一个"运行时"概念,在程序运行使用,类似于一个只读行数据存储方式不同宏定义是直接替换,不会分配内存,存储与程序的代码段中;const常量需转载 2021-08-20 15:11:20 · 166 阅读 · 0 评论 -
c++多线程中“锁”的基本用法
c++之多线程中“锁”的基本用法1. 锁:mutex锁,是生活中应用十分广泛的一种工具。锁的本质属性是为事物提供“访问保护”,例如:大门上的锁,是为了保护房子免于不速之客的到访;自行车的锁,是为了保护自行车只有owner才可以使用;保险柜上的锁,是为了保护里面的合同和金钱等重要东西……在c++等高级编程语言中,锁也是用来提供“访问保护”的,不过被保护的东西不再是房子、自行车、金钱,而是内存中的各种变量。此外,计算机领域对于“锁”有个响亮的名字——mutex(互斥量),学过操作系统的同学对这个名字肯定很转载 2021-08-19 19:53:49 · 5290 阅读 · 0 评论 -
C++ 中的头文件和源文件的作用
理解 C++ 中的头文件和源文件的作用1、C++ 编译模式通常,在一个 C++ 程序中,只包含两类文件—— .cpp 文件和 .h 文件。其中,.cpp 文件被称作 C++ 源文件,里面放的都是 C++ 的源代码;而 .h 文件则被称作 C++ 头文件,里面放的也是 C++ 的源代码。C++ 语言支持"分别编译"(separatecompilation)。也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的 .cpp 文件里。.cpp 文件里的东西都是相对独立的,在编译(compile)时不转载 2021-08-18 16:30:46 · 275 阅读 · 0 评论