每日 C++
文章平均质量分 79
C++ 每日点滴分享,你我共同进步。
谁家的书
这个作者很懒,什么都没留下…
展开
-
每日 C++ - std::enable_shared_from_this 特性
前言毫无疑问,C++11 引入的智能指针的特性对于 C++ 开发来说友好很多,但是同样的也引入了一些开发误区。上一篇 《shared_ptr 引入的循环引用的问题》介绍了 shared_ptr 使用的注意点,今天这边作为一点补充。std::enable_shared_from_this 使用场景在高级编程语言如 Java、C# 开发中,我们会发现对象是引用传递的,这个特点在 C++ 中我们可以使用 shared_ptr 来处理。但是在实际开发中,我们往往需要在对象内的方法中传递自身。这样说可能有原创 2021-03-03 09:30:13 · 387 阅读 · 0 评论 -
每日C++ - shared_ptr 的循环引用问题
shared_ptr 的循环引用问题在 C++ 开发过程中,面对浩繁的代码工作,不免会出现各种 bug,而在智能指针使用方面也存在一些难以察觉的坑。shared_ptr 循环引用造成内存泄漏就是一例。当两个内存对象分别拥有对方的非 nullptr 的 shared_ptr 类型的智能指针,导致 shared_ptr 引用计数无法归 0,从而造成系统内存泄漏。我们来看下面的代码class B;class A{public: A() = default; ~A() { std::co原创 2021-02-27 10:34:36 · 679 阅读 · 0 评论 -
每日 C++ - 基类构造调用纯虚函数的一个问题
我们来看下面的一段代码class Base {public: Base() { Does(); } virtual ~Base() { } virtual void test() = 0; void Does() { std::cout << "Does"; test(); }};class Derived : public Base {public: Derived() {}; ~Deri原创 2020-12-14 10:23:47 · 377 阅读 · 0 评论 -
每日 C++ - std::function
std::function 与函数指针std::function 可以代替函数指针bool IsEmpty(const std::string& str){ return str.empty();}typedef bool (*pIsEmpty)(cosnt std::string& str);using is_empty = std::function<bool(const std::string& str)>;int main(){ s原创 2020-12-03 11:30:46 · 227 阅读 · 0 评论 -
开源 C++ 列表
开源 C++ 库列表此页面的目的是构建开源 C++ 库的比较列表,使得人们在需要特定功能的实现时,不必浪费时间在网上( DuckDuckGo 、谷歌、必应等)搜索。若你知道可能对其他人有用的库,请在此添加到它的链接。能包含进来的库没有限制,但是必须能便捷地下载库的源码。以“原态”提供此页面——希望这有用,但不提供任何担保。过时、误导或错误的链接可能出现于此。若你注意到这些错误,则改正它会很有意义。包管理器conanvcpkgbuild2cgethunter通用Boost -转载 2020-11-09 14:36:29 · 1663 阅读 · 0 评论 -
每日C++ - 谈一下 Visual Studio Code 的 C++ 开发
文章目录说说 Visual Studio Code环境搭建Visual Studio Code 一个 C++ 实例Visual Studio Code & CMake 编译Visual Studio Code 高频快捷键CMakeCMake 基础语法CMake 常用指令CMake 常用变量CMake 构建方式Test 工程编译构建总结说说 Visual Studio Code关于 Visual Studio Code,相信广大看官们已经不感到陌生了,为什么短短几年它能够在 IDE 市场上快速提原创 2020-11-04 10:35:37 · 161 阅读 · 0 评论 -
每日 C++ - g++ 编译介绍
编译/链接过程-E 选项 编译器仅对输入文件进行预处理g++ -E test.cpp -o test.i-S 编译选项告诉 g++ 在为 c++ 代码产生了汇编语言文件后停止编译g++ -S test.i -o test.s汇编// 缺省时 g++ 建立的目标代码文件有一个 .o 的扩展名g++ -c test.s -o test.o链接// 产生可执行文件 testg++ test.o -o test编译参数-g 编译带调试信息的可执行文件g++ test.o -o原创 2020-11-03 15:55:05 · 322 阅读 · 0 评论 -
每日 C++ - Const 函数
每日 C++ - const 函数这节主要探究类的 const 函数的可调用关系,首先先说明下什么是 const 函数,如下形式:std::string getName() const { return name;}我们来看下面这个类#ifndef __CONSTA_H_INCLUDE__#define __CONSTA_H_INCLUDE__class ConstA {public: ConstA() : x(1), p(&x), xx(1), pp(&原创 2020-10-12 09:55:33 · 146 阅读 · 0 评论 -
每日 C++ - STL 迭代器 erase 使用陷阱
STL 迭代器 erase 使用陷阱我们通常在操作容器删除某元素操作时,会遇到一些迭代器失效的问题,我们就清空容器操作来作说明vector 容器清空vector 清空的正确示例vector<int> vec{1, 2, 3};vector<int>::iterator iter = vec.begin();while (iter != vec.end()) { vec.erase(iter);}或者vector<int> vec{1, 2, 3};原创 2020-09-27 12:44:46 · 552 阅读 · 2 评论 -
每日C++ - RAII 程序设计
每日C++ - RAII 程序设计RAII 是 C++ 程序开发中常见的一种设计方式,什么是 RAII 呢? RAII 英文全称为 Resource Acquisition Is Initialization,就是资源获取即初始化。怎么来理解 RAII,在 C++ 开发中常见的一种 RAII 设计方式就是 std::lock_guard<std::mutex> 的使用,我们来看一段代码class A{public: void run() { std::lock_gua原创 2020-09-10 15:03:16 · 163 阅读 · 0 评论 -
每日C++ - STL常见容器初始化
每日C++ - STL常见容器初始化我们在日常使用 STL 模板库时,往往忽略了容器初始化的特征。这里我们来讨论下常见容器的初始化。list 初始化list 支持的初始化形式很多,我们可以查看 list 的源码实现,常见初始化方式如下:list<int> list1; // 默认初始化list<int> list2(10); // 初始化 list,list 包含 10 个为 0 的元素list<int> list3(10, 1); // 初始化 li原创 2020-09-10 12:53:42 · 2918 阅读 · 0 评论 -
每日C++ - STL 迭代器失效性问题总结
关于迭代器失效问题原创 2020-09-27 10:47:14 · 337 阅读 · 0 评论 -
每日C++ - C++ 的几个面向对象的概念(二)- C++ 中的虚函数
C++ 的几个面向对象的概念(二)C++ 中的虚函数不久前遇到一道测试题,是关于 C++ 中类的虚函数的,话不多说,代码码上。情形一#include <iostream>class A {public: virtual void test() { std::cout << "A test" << std::endl; }};class B : public A {public: void test() override { std原创 2020-08-31 22:30:38 · 100 阅读 · 0 评论 -
每日C++ - C++ 的几个面向对象的概念(一)- 抽象类/虚基类
C++ 的几个面向对象的概念(一)抽象类是一个带有纯虚函数的类;不能被实例化class AbstractClass{ virtual int sayHello() = 0;}Some Questions抽象类是干嘛的?通俗讲,抽象的对,代码越容易理解,代码复用率越高,开发效率越高。什么是纯虚函数? 抽象类中能包含非纯虚函数吗?看到上面的例子了吗?它是一个虚函数,然后它没有实现,最后 = 0。^^虚基类虚基类被派生类虚继承,能够解决多重继承引入的二义性问题原创 2020-08-21 08:41:32 · 152 阅读 · 0 评论 -
每日C++ - 常量指针与指针常量
每日C++ - 常量指针与指针常量常量指针就是一个指针指向一个常量,所以,一个常量指针可以改变指针地址,却不能改变地址指向的内存。int a = 123;int b = 456;const int* p = &a;*p = b; // 编译时发生错误p = &b; // 通过error: assignment of read-only location '* p'指针常量就是一个地址为常量的指针,一个指针常量不能改变指针地址,却可以该百年地址指向的内存。in原创 2020-08-21 08:57:22 · 115 阅读 · 0 评论