摘要:
链接:https://www.jianshu.com/p/d994731f658d #pragma pack() 1.#pragma简述: 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一 阅读全文
摘要:
成员变量和函数的存储 c++实现了“封装”,那么数据(成员属性)和操作(成员函数)是什么样的呢? “数据”和“处理数据的操作(函数)”是分开存储的。 c++中的非静态数据成员直接内含在类对象中,就像c struct一样。 成员函数(member function)虽然内含在class声明之内,却不出 阅读全文
摘要:
单例实现 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; class Singleton { public: static Singleton* Instance() //只提供一个公有化的指针返回 { 阅读全文
摘要:
静态成员变量 在类定义中,它的成员(包括成员变量和成员函数),这些成员可以用关键字static声明为静态的,称为静态成员。 不管这个类创建了多少个对象,静态成员只有一个拷贝,这个拷贝被所有属于这个类的对象共享。 在一个类中,若将一个成员变量声明为static,这种成员称为静态成员变量。与一般的数据成 阅读全文
摘要:
对象创建 当创建一个c++对象时会发生两件事: 为对象分配内存 调用构造函数来初始化那块内存 第一步我们能保证实现,需要我们确保第二步一定能发生。c++强迫我们这么做是因为使用未初始化的对象是程序出错的一个重要原因 动态分配内存方法 为了在运行时动态分配内存,c在他的标准库中提供了一些函数,mall 阅读全文
摘要:
explicit 防止隐式类型转换 阅读全文
摘要:
1.类的类成员的类中要有默认构造参数 2.构造顺序 当类对象作为类的成员时,构造顺序是先依次构造类成员的构造,然后再构造自己 3.析构顺序 析构与构造相反,先析构自己,再以相反顺序依次析构成员 #define _CRT_SECURE_NO_WARNINGS #include <iostream> # 阅读全文
摘要:
利用初始化列表来初始化数据 构造函数后面 + : 属性1(参数1), 属性2(参数2),…… class Test { public: /* Test(int a, int b, int c) { m_A = a; m_B = b; m_C = c; }*/ Test(int a, int b, i 阅读全文
摘要:
浅拷贝 同一类型的对象之间可以赋值,使得两个对象的成员变量的值相同,两个对象仍然是独立的两个对象,这种情况被称为浅拷贝. 一般情况下,浅拷贝没有任何副作用,但是当类中有指针,并且指针指向动态分配的内存空间,析构函数做了动态内存释放的处理,会导致内存问题。 浅拷贝引发的问题 深拷贝 当类中有指针,并且 阅读全文
摘要:
系统默认给一个类提供3个函数 默认构造、拷贝构造、析构函数 1.当我们有了有参构造函数,那么系统就不会再提供默认构造函数了 没有有参构造函数时: 2.但是 系统还会提供默认拷贝构造函数,即使没有定义拷贝构造,也可以直接调用,进行简单的值拷贝 3.当我们提供了拷贝构造,那么系统就不会提供其它构造了,如 阅读全文
摘要:
debug和release调试结果不同是因为release下会将代码再次优化 void test02() { Person p; p.age = 10; doWork(p); } Person doWork2() { Person p1; return p1; //复制一个新的数据返回 } void 阅读全文