C++
文章平均质量分 70
娱乐界祖师爷
这个作者很懒,什么都没留下…
展开
-
类设计者的核查表
1.你的类需要一个构造函数吗?有的类太简单,它们的结构就是它们的接口,所以不需要构造函数。但是,我们现在主要关心的是哪些足够复杂的类,它们需要构造函数来隐藏它们内部工作方式。2.你的数据成员是私有的吗?通常使用公有的数据成员不是什么好事,因为类设计者无法控制何时访问这些成员。3.你的类需要一个无参的构造函数吗?如果一个类已经有了构造函数,而你想声明该类的对象可以不必显示地初始化它们,则必须显示地写一个无参的构造函数。4.是不是每个构造函数初始化所有的数据成员?构造函数的用途就是用原创 2022-05-09 23:22:19 · 199 阅读 · 0 评论 -
解决: g++: internal compiler error: Killed (program cc1plus)
查了很多资料,最后发现主要原因是内存不足,g++编译时需要大量内存, 临时使用交换分区来解决吧虚拟机直接调整内存大小,远程服务器可使用以下命令命令行输入:sudo dd if=/dev/zero of=/swapfile bs=64M count=16sudo mkswap /swapfilesudo swapon /swapfile编辑完成后,退还空间:sudo swapoff /swapfilesudo rm /swapfile...原创 2022-02-27 03:17:19 · 485 阅读 · 0 评论 -
C++实战笔记(三)
const/volatile关键字const表示常量,较简单的用法就是定义程序的数字、字符串常量、代替宏定义等,例如const int MAX_LEN = 1024;const std::string NAME = "meto";从C++程序生命周期的角度来看,我们就会发现它和宏定义还是本质区别的:const定义的常量在预处理阶段并不存在,直到运行阶段才出现。它叫只读变量更合适。既然它是变量,那么使用指针获取地址,再强制写入也是可以的,但这种做法破坏了常量性,绝对不提倡。下面一个原创 2022-02-18 00:50:26 · 780 阅读 · 0 评论 -
C++实战笔记(一)
命名规范:变量、函数名和命名空间用snake_case,全局变量加"g_"前缀 自定义类名用CamelCase风格,成员函数用snake_case,成员变量加"m_"前缀。 宏和常量应当全大写,单词之间用下划线连接 尽量不要将下划线作为变量的前缀或后缀,很难识别CamelCase:驼峰命名法,分为大驼峰,小驼峰。区别为首字符是否要大小写。snake_case:用的全是小写,单词之间用下划线连接。#define MAX_PATH_LEN 256 //常量全大写int g_sys原创 2022-01-20 00:59:40 · 984 阅读 · 0 评论 -
C++可调用对象与function
C++语言有几种可调用对象:函数、函数指针、lambda表达式、bind创建的对象以及重载了函数调用运算符的类。和其他对象一样,可调用的对象也有类类型。例如,每个lambda有它自己唯一的(未命名)类类型;函数及函数指针的类型则由其返回值类型和实参类型决定。然而,两种不同类型的可调用对象却可能共享同一种调用形式。调用形式指明了调用返回的类型以及传递给调用的实参类型。一种调用形式对应一个函数类型,例如:int(int, int);是一个函数类型,它接受两个int,返回一个int不同类原创 2022-01-16 18:44:16 · 431 阅读 · 0 评论 -
C++ 对象移动
右值引用为了支持移动操作,新标准引入了一种新的引用类型——右值引用,所谓右值引用就是必须绑定右值的引用,我们通过&&而不是&来获得右值引用。右值引用有一个重要的性质:只能绑定到一个将要销毁的对象。因此我们可以自由地将一个右值引用的资源“移动”到另一个对象中。一个左值表达式表示的是一个对象的身份,而一个右值表达式表示的是对象的值。...原创 2022-01-15 22:21:50 · 841 阅读 · 0 评论 -
C++ allocator类
C++ allocator类讲解原创 2022-01-06 00:31:14 · 837 阅读 · 1 评论 -
C++智能指针和动态内存
标准库提供了一个可以管理new分配的数组的unique_ptr版本。为了用一个unique_ptr管理动态数组,我们必须在对象类型后面跟一对空方括号://up指向一个包含10个未初始化int的数组unique_ptr<int[]> up(new int[10]);up.release(); //自动用delete[]销毁其指针类型说明符中的方括号指出up指向一个int数组而不是一个int。当一个unique_ptr指向的是一个数组时,我们不能使用点和箭头成员运算符号。毕竟un原创 2022-01-03 15:55:11 · 295 阅读 · 0 评论 -
C++智能指针之weak_ptr
weak_ptr是一种不控制所指向对象生存周期的智能指针,它指向由一个shared_ptr管理的对象。将一个weak_ptr绑定到一个shared_ptr不会改变shared_ptr的引用计数。一旦最后一个指向对象的shared_ptr被销毁,对象会被释放。即使有weak_ptr指向对象,对象也会被释放,因此,weak_ptr的名字抓住了这种智能指针“弱”共享对象的特点。 weak_ptr...原创 2022-01-03 15:20:40 · 570 阅读 · 0 评论 -
C++智能指针之unique_ptr
一个unique_ptr“拥有”它所指向的对象。与shared_ptr不同,某个时刻只能有一个unique_ptr指向一个给定的对象。当unique_ptr被销毁时,它所指向的对象也被销毁。当我们定义一个unique_ptr时,需要将其绑定到一个new返回的指针上。类似shared_ptr,初始化unique_ptr必须采用直接初始化形式:unique_ptr<double> p1; //可以指向一个double的shared_ptrunique_ptr<int> p2(原创 2022-01-02 21:27:26 · 708 阅读 · 0 评论 -
C++智能指针之shared_ptr
shared_ptr类智能指针也是模板,当我们创建一个智能指针时,必须提供额外的信息——指针可以指向的类型:shared_ptr<string> p1; //可以指向string的 shared_ptrshared_ptr<list<int>> p2; //可以指向list<int>的 shared_ptr默认初始化的智能指针中保存着一个空指针。智能指针的使用方式类似于普通指针。解引用一个智能指针返回它指向的对象。如果在一个条件判断中原创 2022-01-01 18:49:28 · 2796 阅读 · 0 评论 -
C++参数绑定(bind)
C++bind函数详解原创 2021-12-29 09:31:59 · 1604 阅读 · 0 评论 -
C++ lambda表达式
C++ lambda表示的详解原创 2021-12-28 01:26:12 · 829 阅读 · 0 评论 -
C++合成默认构造函数的4种情况
合成默认构造函数的4种情况(合成是为了满足编译器的需要,而不是程序的需要)1. "带有Default Constructor"的Member Class Objectclass Foo{ public: Foo(); Foo(int);}//Bar包含Fooclass Bar{ public: Foo foo; char *str;}void foo_bar(){ Bar bar; //Bar::原创 2021-01-27 20:54:02 · 327 阅读 · 0 评论 -
C++,为什么只有指针或引用支持多态
这个问题在《深度探索C++对象模型》中,给予了解释:"一个pointer或一个reference之所以支持多态,是因为它们并不引发内存中任何‘与类型有关的内存委托操作’;会受到改变的,只有它们所指向的内存的‘大小和内容解释方式’而已"。“当一个base class object被直接初始化为(或是被指定为)一个derived class object时,derived object就会被切割以塞入较小的base type内存中,derived type将没有留下任何蛛丝马迹。多态于是不再呈现,而一个严格原创 2021-01-26 16:57:11 · 490 阅读 · 0 评论 -
#ifdef __cplusplus extern “C“ { #endif
#ifdef __cplusplusextern "C" {#endif*代码*#ifdef __cplusplus}#endif首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代码,那么加入"extern "C"{" 和 " }"处理原创 2015-06-01 15:11:47 · 799 阅读 · 0 评论