![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++11
EloryDo
当你的才华还撑不起你的野心时,那你就应该静下心来学习。当你的经济还撑不起你的梦想时,那你就应该踏实的去工作!
展开
-
C++11auto
1、auto使用auto必须初始化auto x = 5; //x intconst auto *v = &x, u = 6; //v const int*, u const intauto限制void func(auto a = 1) //error, auto不能用于函数参数{}struct sFoo{ auto var1 = 0; //error, auto不能应用于非静态成员变量 static const auto ...原创 2020-09-13 10:45:29 · 111 阅读 · 0 评论 -
C++11右值引用
第二章的内容:主讲右值引用1、左值和右值区分的判据是看是否可对表达式用&取址,左值可以,右值不可以//1、左值引用相当于给变量起个别名,故必须是变量,而不能是常量int aa = 1;int &b = aa;//okint &k = 2;//error 必须为左值//2、右值引用int&& a = 1; //ok,实质上就是给不具名(匿名)变量起个别名int b = 1;int && c = b; //error! 不能将一个左原创 2020-09-13 17:08:41 · 101 阅读 · 0 评论 -
三种智能指针
这章主要学习智能指针。shared_ptr1.初始化方式优先采用make_shared的方式来初始化,因为其更高效。 int *p = new int(); std::shared_ptr<int> bptr(p);//方式1 std::shared_ptr<int> aptr = std::make_shared<int>(2);//方式 2 std::shared_ptr<int> cptr(aptr); //方式3 /原创 2020-09-19 18:51:56 · 234 阅读 · 0 评论 -
智能指针管理第三方库
本节记录一下通过智能指针来管理第三方库内存的分配。在实际应用中会用到很多别人的lib,当该lib分配内存返回的指针一般是原始指针,其需要手动释放内存。这时候就可以使用智能指针来自动管理分配的内存了。void* p = GetHandle()->Create();//do something...GetHandle()->Release(p);在实际试用中可能会忘记使用Release,故可以通过使用智能指针的方法来实现,防止出现内存泄露的情况。//写成一个函数接口如下st原创 2020-09-19 21:29:01 · 147 阅读 · 0 评论 -
c++ Lambda表达式
[capture list] (params list) mutable exception-> return type { function body } 表达式中各个参数的含义如下:[capture list]:外部变量列表 (表示外部传进来的数值)(params list):形参列表 (比如用for_each传进来的数值)mutable:表示能不能修改捕获的变量 (可省略)exception:异常设定 ...原创 2021-06-22 13:21:02 · 71 阅读 · 0 评论 -
单例模式
定义:要求一个类只能生成一个对象,所有对象对它的依赖相同。优点:只有一个实例,减少内存开支。应用在一个经常被访问的对象上 减少系统的性能开销,应用启动时,直接产生一单例对象,用永久驻留内存的方式。 避免对资源的多重占用 可在系统设置全局的访问点,优化和共享资源访问。缺点:一般没有接口,扩展困难。原因:接口对单例模式没有任何意义; 单例模式对测试是不利的。如果单例模式没完成,是不能进行测试的。 单例模式与单一职责原则有冲突。原因:一个类应该只实现一个逻辑,而不关心它是否是单例,是不原创 2021-03-02 17:47:02 · 63 阅读 · 0 评论 -
spdlog的使用
spdlog是一个开源的、快速的、仅有头文件的C++11 日志库,代码的地址在GitHub上,地址为:https://github.com/gabime/spdlog,目前最新的发布版本为v1.x。它提供了向流、标准输出、文件、系统日志、调试器等目标输出日志的能力。它支持的平台包括Windows、Linux、Mac、Android。spdlog特性:(1)、非常快,性能是它的主要目标;(2)、仅包括头文件(#include "spdlog/spdlog.h",#include "spdlog/c原创 2020-11-10 16:02:57 · 2977 阅读 · 0 评论 -
c++构造函数异常处理
c++的构造函数中会发生异常处理的情况,这时候其不会跳转到析构函数了,该异常需要自己来处理。#include <iostream>class TestA{public: TestA() { //基类中异常 try { std::cout << "TestA Contructor" << std::endl; throw std::string("testA exception"); } catc原创 2020-06-11 14:21:22 · 714 阅读 · 0 评论 -
c++ map的使用
1.map的赋值有一下几种赋值方式,最简单的是直接赋值,其次是insert赋值,insert又有两种插入的方法,一种是直接插入pair,另一种是插入value_type数据。如下: std::map<int, std::string>m_mperson; //成员初始化列表赋值,成员初始化列表是c++11之后才有的 m_mperson = { { 0, "aa" }, { 1, "bb" } }; //insert赋值 m_mperson.insert(std::pa原创 2020-05-28 14:52:00 · 411 阅读 · 0 评论 -
智能指针shared_ptr中new和make_ptr两种方式的区别
shared_ptr是c++11中的智能指针,其可以自动的释放指针,避免了new之后忘记delete的问题。shared_ptr 对象在内部指向两个内存位置:1、指向对象的指针。2、用于控制引用计数数据的指针。计数数据指针的作用:1、当新的 shared_ptr 对象与指针关联时,使用use_count(),其指针关联的引用计数增加1。2、当任何 shared_ptr 对象超出作...原创 2020-04-29 18:01:56 · 7982 阅读 · 2 评论 -
Windows下线程中WaitForSingleObject和WaitForMultipleObjects的用法总结
Windows下的事件编程,应包含头文件#include <windows.h> // for HANDLE 当你创建一个线程时,其实那个线程是一个循环,不像上面 那样只运行一次的。这样就带来了一个问题,在那个死循环里要找到合适的条件退出那个死循环,那么是怎么样实现它的呢? 在Windows里往往是采用事件的 方式,它的实现原理如下:在...原创 2019-12-11 10:09:58 · 1555 阅读 · 0 评论 -
thread和mem_fn的使用
当需要利用类成员函数(MyClass::thread_func)来创建子线程时,需如下码码:std::thread t(std::mem_fn(&MyClass::thread_func), Object, args..); 例子如下:#include <iostream>#include <thread>void fun(){ ...原创 2019-12-06 13:14:22 · 979 阅读 · 0 评论 -
C++11的std::async 和std::future
std::future std::future是一个非常有用也很有意思的东西,简单说std::future提供了一种访问异步操作结果的机制。从字面意思来理解,它表示未来,我觉得这个名字非常贴切,因为一个异步操作我们是不可能马上就获取操作结果的,只能在未来某个时候获取,但是我们可以以同步等待的方式来获取结果,可以通过查询future的状态(future_status)来获取异步操作的结果。fu...原创 2019-11-29 15:56:42 · 236 阅读 · 0 评论 -
C++11面试题之条件变量
1、子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程又循环100次,如此循环50次,试写出代码#include <iostream>#include <thread>#include <mutex>#include <condition_variable>std::mutex m...原创 2019-11-28 17:27:39 · 238 阅读 · 0 评论 -
c++使用function和bind的回调函数
记录一下如何使用回调函数。testapp中利用回调函数,显示rsa_client中接收到数值,具体如下代码:testapp.h中的函数RSA_Client *m_Client;void RecvData(const std::string &Msg);testapp.cpp中的函数m_Client->SetRSACallBackFun(std::bind...原创 2019-10-20 20:19:13 · 1151 阅读 · 0 评论 -
vector中的reserve和resize使用
记录一下使用vector中的reserve函数犯的错误,并总结下其和resize的区别。定义了一个变量,并对vDefect进行简单的赋值操作,并使用C_uint.reserve(vDefectItem.size())开辟空间struct sDefectItem{ unsigned int type; int x; int y; int width;};vector<...原创 2019-09-10 11:25:10 · 768 阅读 · 0 评论 -
C++之智能指针std::shared_ptr简单总结
std::shared_ptr的主要作用如下:1、智能指针主要的用途就是方便资源的管理,自动释放没有指针引用的资源。2、使用引用计数来标识是否有多余指针指向该资源。(注意,shart_ptr本身指针会占1个引用)可以用shared_ptr.use_count()函数查看这个智能指针的引用计数,一旦最后一个这样的指针被销毁,也就是一旦某个对象的引用计数变为0,这个对象会被自动删除#...原创 2019-09-05 16:33:55 · 9272 阅读 · 0 评论 -
C++11 std::async和std::future
std::future是一个非常有用也很有意思的东西,简单说std::future提供了一种访问异步操作结果的机制。从字面意思来理解, 它表示未来,我觉得这个名字非常贴切,因为一个异步操作我们是不可能马上就获取操作结果的,只能在未来某个时候获取,但是我们可以以同步等待的方式来获取 结果,可以通过查询future的状态(future_status)来获取异步操作的结果。future_status有三...原创 2019-09-04 15:45:37 · 659 阅读 · 0 评论 -
std::ref的使用
看C++并发编程中发现的一个问题,查询资料记录如下:void update_data_for_widget(widget_id w,widget_data& data); // 1void oops_again(widget_id w){ widget_data data; std::thread t(update_data_for_widget,w,data); // ...原创 2019-08-22 16:12:42 · 886 阅读 · 0 评论