随笔分类 -  C/C++

摘要:C++类在内存中的存储方式 C++ 内存分为 5 个区域: 堆 heap :由 new 分配的内存块,其释放编译器不去管,由程序员自己控制。如果程序员没有释放掉,在程序结束时系统会自动回收。涉及的问题:“缓冲区溢出”、“内存泄露”。 栈 stack :是那些编译器在需要时分配,在不需要时自动清除的存 阅读全文
posted @ 2022-10-17 21:23 放飞梦想C 阅读(758) 评论(1) 推荐(5)
摘要:static 是什么? static 是C++中的一个修饰符,它用来控制变量的存储方式和可见性。 为什么要用static 因为函数内部定义的变量,当程序执行到它的定义处时,编译器为它在栈上分配空间,函数在栈上分配的空间在此函数执行结束时会释放掉。如果想将函数中此变量的值保存至下一次调用时,如何实现? 阅读全文
posted @ 2022-10-13 21:57 放飞梦想C 阅读(209) 评论(0) 推荐(0)
摘要:class A { private: const int a; // 常对象成员,可以使用初始化列表或者类内初始化 public: // 构造函数 A() : a(0) { }; A(int x) : a(x) { }; // 初始化列表 // const可用于对重载函数的区分 int getVal 阅读全文
posted @ 2022-10-13 20:40 放飞梦想C 阅读(86) 评论(0) 推荐(0)
摘要:Protobuf protobuf (protocol buffer) 是谷歌内部的混合语言数据标准。通过将结构化的数据进行序列化(串行化),用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。 序列化: 将结构数据或者对象转换成能够用于存储和传输的格式。 反序列化: 在其 阅读全文
posted @ 2022-08-27 22:27 放飞梦想C 阅读(1660) 评论(0) 推荐(0)
摘要:它什么是? 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;类似的还有线程池。 为什么要用? 一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完都关闭连接,这样造成系统的性能低下。各种池化技术的使用原因都是类似 阅读全文
posted @ 2022-08-25 14:58 放飞梦想C 阅读(448) 评论(0) 推荐(0)
摘要:cpp #include<thread> #include<mutex> #include<vector> #include<condition_variable> #include<boost/circular_buffer.hpp> #include<functional> #include<a 阅读全文
posted @ 2022-03-09 21:49 放飞梦想C 阅读(92) 评论(0) 推荐(0)
摘要:无界队列 #include<queue> #include<mutex> #include<condition_variable> #include<optional> #include<cassert> #include<thread> template<typename T,typename C 阅读全文
posted @ 2022-03-08 23:35 放飞梦想C 阅读(740) 评论(1) 推荐(0)
摘要:共享指针 管理指针的存储,提供有限的垃圾回收工具,并可能与其他对象共享该管理。 shared_ptr类型的对象都能够获得指针的所有权并共享该所有权:一旦它们获得所有权,当最后一个所有者释放该所有权时,指针的所有者组就负责删除该所有者。 shared_ptr对象在自身被销毁后,或者一旦其值因赋值操作或 阅读全文
posted @ 2022-03-07 23:46 放飞梦想C 阅读(193) 评论(0) 推荐(0)
摘要:唯一指针 管理指针的存储,提供有限的垃圾回收工具,与内置指针相比几乎没有开销(取决于所使用的删除程序)。 这些对象具有获取指针所有权的能力:一旦它们获得所有权,它们就会通过在某个时候负责删除指向的对象来管理指向的对象。 unique_ptr对象在它们本身被销毁时,或者一旦它们的值通过赋值操作或显式调 阅读全文
posted @ 2022-03-07 20:19 放飞梦想C 阅读(506) 评论(0) 推荐(0)
摘要:向量 向量是序列容器,表示可以更改大小的数组。 就像数组一样,向量对其元素使用连续的存储位置,这意味着也可以使用指向其元素的常规指针上的偏移量来访问其元素,并且与数组一样高效。但与数组不同的是,它们的大小可以动态变化,它们的存储由容器自动处理。 在内部,向量使用动态分配的数组来存储其元素。可能需要重 阅读全文
posted @ 2022-03-06 22:34 放飞梦想C 阅读(305) 评论(0) 推荐(0)
摘要:atomic 每个 std::atomic 模板的实例化和全特化定义一个原子类型。若一个线程写入原子对象,同时另一线程从它读取,则行为良好定义。 另外,对原子对象的访问可以建立线程间同步,并按 stdmemory_order 所对非原子内存访问定序。 stdatomic 既不可复制亦不可移动。 成员 阅读全文
posted @ 2022-03-02 23:21 放飞梦想C 阅读(377) 评论(0) 推荐(0)
摘要:promise 空模板 非 void 特化,用于在线程间交流对象 void 特化,用于交流无状态事件 类模板 stdpromise 提供存储值或异常的设施,之后通过 stdpromise 对象所创建的 stdfuture 对象异步获得结果。注意 stdpromise 只应当使用一次。 每个 prom 阅读全文
posted @ 2022-03-02 23:03 放飞梦想C 阅读(199) 评论(0) 推荐(0)
摘要:condition_variable condition_variable 类是同步原语,能用于阻塞一个线程,或同时阻塞多个线程,直至另一线程修改共享变量(条件)并通知 condition_variable 。 有意修改变量的线程必须 获得 stdmutex (常通过 stdlock_guard ) 阅读全文
posted @ 2022-03-02 23:01 放飞梦想C 阅读(360) 评论(0) 推荐(0)
摘要:lock_guard 类 lock_guard 是互斥体包装器,为在作用域块期间占有互斥提供便利 RAII 风格机制。 创建 lock_guard 对象时,它试图接收给定互斥的所有权。控制离开创建 lock_guard 对象的作用域时,销毁 lock_guard 并释放互斥。 lock_guard 阅读全文
posted @ 2022-03-02 23:00 放飞梦想C 阅读(221) 评论(0) 推荐(0)
摘要:mutex mutex 类是能用于保护共享数据免受从多个线程同时访问的同步原语。 mutex 提供排他性非递归所有权语义: 调用方线程从它成功调用 lock 或 try_lock 开始,到它调用 unlock 为止占有 mutex 。 线程占有 mutex 时,所有其他线程若试图要求 mutex 的 阅读全文
posted @ 2022-03-02 22:59 放飞梦想C 阅读(158) 评论(0) 推荐(0)
摘要:thread 类 thread 表示单个执行线程。线程允许多个函数同时执行。 线程在构造关联的线程对象时立即开始执行(等待任何OS调度延迟),从提供给作为构造函数参数的顶层函数开始。顶层函数的返回值将被忽略,而且若它以抛异常终止,则调用 stdterminate 。顶层函数可以通过 stdpromi 阅读全文
posted @ 2022-03-02 22:58 放飞梦想C 阅读(219) 评论(0) 推荐(0)
摘要:计算机中的并发 以前,大多数计算机只有一个处理器,具有单个处理单元(processing unit)或核心(core),如今还有很多这样的台式机。这种机器只能在某一时刻执行一个任务,不过它可以每秒进行多次任务切换。通过“这个任务做一会,再切换到别的任务,再做一会儿”的方式,让任务看起来是并行执行的。 阅读全文
posted @ 2022-02-24 18:09 放飞梦想C 阅读(160) 评论(0) 推荐(0)
摘要:shared_ptr 智能指针也是模板类,因此当我们创建一个智能指针是要提供额外的信息——指针可以指向的类型。默认初始化的智能指针保存着一个空指针。shared_ptr允许多个指针指向同一对象。 shared_ptr<string> p1; //可指向string shared_ptr<list<i 阅读全文
posted @ 2022-02-23 19:26 放飞梦想C 阅读(131) 评论(0) 推荐(0)
摘要:安装MySQL 可以参考这篇文章《在Ubuntu上安装MySQL》 连接 具体可以看官方的MySQL参考手册 示例代码 #include<iostream> #include<mysql/mysql.h> /* mysql_init() 获取或初始化MYSQL结构 mysql_real_connec 阅读全文
posted @ 2021-11-25 13:40 放飞梦想C 阅读(676) 评论(0) 推荐(0)
摘要:虚析构 #include<iostream> class Base { public: Base() { std::cout << "base 构造" << std::endl; } virtual~Base() { std::cout << "base 析构" << std::endl; } }; 阅读全文
posted @ 2021-07-24 14:54 放飞梦想C 阅读(110) 评论(0) 推荐(0)