![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++学习
OODeveloper
2015-6~2017-3参与Android项目开发,开发工具Android studio;
2017-3~2019-5参与C++项目开发,开发平台QT;
2019-5~2020-7 参与iOS项目开发,开发语言Object-c,开发环境Xcode。
展开
-
C++内存模型
C++内存分为5个区域:栈(Stack): 栈的内存地址是连续的且被一一记录的。内存由编译器在需要时自动分配和释放。通常用来存储局部变量和函数参数。栈运算分配内置于处理器的指令集中,效率很高,但是分配的内存容量有限。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。堆(Heap ): 由new分配的内存块,其释放编译器不去管,由我们程序自己控制,一个new对应一个delete,或者一个new[] 对应一个delete[]。如果...原创 2021-02-17 14:56:43 · 206 阅读 · 1 评论 -
C++智能指针总结
关于智能指针方面的内容通过对引用计数的分析以及C++自带的智能指针进行介绍,通过以下文章,大家应该对智能指针有一个初步的认识。智能指针与引用计数详解(一)智能指针与引用计数详解(二)智能指针与句柄详解(一)智能指针与句柄详解(二)C++智能指针——unique_ptr详解C++智能指针——auto_ptr详解C++智能指针——share_ptr详解C++智能指针——...原创 2019-04-29 20:37:40 · 358 阅读 · 0 评论 -
智能指针与句柄详解(二)
前言智能指针与句柄详解(一)中讲了句柄类的实现,本章将用C++模板来实现句柄类。原创 2019-04-29 20:04:46 · 174 阅读 · 0 评论 -
C++智能指针——weak_ptr详解
前言 weak_ptr 设计的目的是为配合 shared_ptr 而引入的一种智能指针来协助 shared_ptr 工作, 它只可以从一个 shared_ptr 或另一个 weak_ptr 对象构造, 它的构造和析构不会引起引用记数的增加或减少. 同时weak_ptr 没有重载*和->但可以使用 lock 获得一个可用的 shared_ptr 对象。C++智能指针——share_ptr...原创 2019-03-31 21:06:50 · 19170 阅读 · 0 评论 -
C++智能指针——share_ptr详解
前言std::shared_ptr是在c++11中引入的一种智能指针,其特点是它所指向的资源具有共享性,即多个shared_ptr可以指向同一份资源。在c++中使用shared_ptr需要包含头文件。共享指针是靠引用计数的方式来实现共享的功能,其中引用计数可以通过智能指针与引用计数详解文章了解。std::shared_ptr常用函数介绍std::shared_ptr的初始化有两种方法:...原创 2019-03-30 18:52:31 · 13896 阅读 · 1 评论 -
C++智能指针——unique_ptr详解
前言从C++智能指针——auto_ptr详解中可以了解到auto_ptr指针的特性以及在C++11中已经被unique_ptr所代替。unique_ptr介绍与auto_ptr相比unique_ptr有如下特点:1、 unique_ptr是一个独享所有权的智能指针,无法进行复制构造、赋值操作操作,只能进行移动操作。无法使两个unique_ptr指向同一个对象;2、unique_ptr智能...原创 2019-02-28 21:14:13 · 10562 阅读 · 0 评论 -
C++智能指针——auto_ptr详解
前言从之前智能指针的介绍中可以了解到智能指针主要作用是管理内存,避免内存泄漏和悬垂指针。之前介绍的不管是智能指针与引用计数详解还是智能指针与句柄详解,其核心就是通过一个类来管理被new出来的对象,具体的技术就是靠引用计数。auto_ptr介绍auto_ptr的实现原理其实就是RAII,在构造的时候获取资源,在析构的时候释放资源,并进行相关指针操作的重载,使用起来就像普通的指针。该智能指针已...原创 2019-02-27 18:26:36 · 12113 阅读 · 0 评论 -
C++模板与泛型编程
前言泛型是独立于任何特定类型的编码,在C++中,我们经常使用的容器vector,该容器可以定义不同种类的vector,如vector list、vector list或自定义类型等。函数模板如果要编写一个函数来比较两个数的大小,返回其中最大值,这两个数可以是int型,也可以是double型或者自定义类型等,要想用一个函数实现上述功能,则模板函数就派上用场了。template <typ...原创 2019-01-27 19:30:33 · 174 阅读 · 0 评论 -
智能指针与句柄详解(一)
前言:智能指针与引用计数详解(一)中提到实现智能指针有两种方法,一种是引用计数,另一种就是句柄类实现。什么是句柄类?句柄类是用来存储和管理基类指针。指针所指对象的类型可以变化,它既可以指向基类类型对象又可以指向派生类型对象。用户通过句柄类访问继承层次的操作。因为句柄类使用指针执行操作,虚成员的行为将在运行时根据句柄实际绑定的对象的类型而变化。因此,句柄的用户可以获得动态行为但无须操心指针的管...原创 2019-01-05 23:13:29 · 699 阅读 · 0 评论 -
智能指针与引用计数详解(一)
前言在C++项目开发中,有时候会遇到悬垂指针的问题,其中提供的解决方案推荐使用智能指针。在《C++Primer》书13.5章 提到了该技术的具体使用场景和实现。通过反复阅读和代码测试终于了解其中的思想,下面谈谈自己的理解,如果发现有什么问题,请大家批评指正。什么是智能指针?智能指针其实就是一个类,除了增加了一些功能外,其因为跟跟普通指针一样。通常情况,new一个对象会申请一块内存,复制或者...原创 2018-12-10 22:25:38 · 7274 阅读 · 0 评论 -
智能指针与引用计数详解(二)
在智能指针与引用计数详解(一)当中讲了智能指针还有改进的地方,下面具体问题具体分析。一、智能指针的赋值方法改进上一章的赋值方法中只要是赋值都是右操作数引用计数加一,左操作数引用计数减一。没有考虑过引用计数对象自赋值的情况。比如按照上一章代码,在main函数中做一下修改: int *ip = new int(12); HasPtr ptr(ip, 20); ...原创 2018-12-12 14:10:43 · 1192 阅读 · 0 评论 -
volatile和synchronized的区别
记得刚毕业面试的时候,被问到单例模式的时候,要求写一个线程安全的单例模式出来,当时只知道加synchronized关键字,后来才知道还有volatile这个关键字。通常听到线程安全、线程同步的时候就要联想到volatile和synchronized关键字,对于并发编程来说基本都会用到,所以了解其中的区别对于之后开发很有意义。synchronized关键字,它会阻止其它线程获取当前对象的监控...原创 2018-09-16 20:40:46 · 201 阅读 · 1 评论 -
并发编程三大特性
并发编程中往往涉及三个问题:原子性、可见性、有序性。原子性定义:即一个或者多个操作作为一个整体,要么全部执行,要么都不执行,并且操作在执行过程中不会被线程调度机制打断;而且这种操作一旦开始,就一直运行到结束,中间不会有任何上下文切换。例如转账问题,A向B转1000元,该过程分解成两个步骤:1、A账户减掉1000元;2、B账户增加1000元。上述两个步骤如果中途被打断会造成什...原创 2018-09-16 19:56:19 · 4964 阅读 · 1 评论 -
C++ 类大小分析
以下测试代码的运行环境:Ubuntu 16.04.4 LTSgcc version 4.8.5x64空类、单一继承的空类、多重继承的空类所占空间大小为:1(字节)。 实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址一个类中,虚函数本身、成员函数(包括静态与非静态)和静态数据成...原创 2018-08-24 16:54:32 · 412 阅读 · 0 评论 -
Vector 容器快速删除方法
vector是一个向量容器,在C++开发中经常会使用到,vector本身自带的删除函数有:iterator erase(iterator it):删除向量中迭代器指向元素 iterator erase(iterator first,iterator last):删除向量中[first,last)中元素 void pop_back():删除向量中最后一个元素 void clear():清空...原创 2018-08-23 17:11:23 · 13491 阅读 · 0 评论