随笔分类 - C++
摘要:## 内存泄漏问题 ``` class BaseA { public: BaseA() { printf("BaseA::BaseA()\n"); }; ~BaseA() { printf("BaseA::~BaseA()\n"); }; virtual void func1() {}; }; cl
阅读全文
摘要:返回局部变量地址 char* GetMemory(void) { char p[] = "hello world"; return p; } int main() { char* str = NULL; str = GetMemory(); printf(str); return 0; } GetM
阅读全文
摘要:# 示例 ``` class test1 { public: virtual void proc1(); void proc(); }; class test2:public test1 { public: virtual void proc1(); }; void test1::proc1() {
阅读全文
摘要:C++强制类型转换 C++提供了四种强制类型转换static_cast,const_cast,reinterpret_cast,dynamic_cast. static_cast 一般的类型转换static_cast都可以实现(除了底层const)。 上述代码将int类型的变量转换为double类型
阅读全文
摘要:string.h string.h是一个C标准头文件,所有的C标准头文件都形如name.h的形式,通过#include <string.h>可以导入此头文件。之后我们就可以在程序中使用strlen()等函数了。但是一般编译器认为string.h是基本的头文件会默认包含,所以我们一般都可以直接使用st
阅读全文
摘要:每一种编译器实现异常处理的方式会有所不同,但是都是基于Windows的SEH异常处理。这里以MSC编译器为例。 C异常处理 #include <Windows.h> int main(int argc, char* argv[]) { _try { _try { } _except(EXCEPTIO
阅读全文
摘要:# 多重继承 多重继承是指C++类同时继承两个类或两个以上的类。 ``` class Test { public: int num1; Test() { num1 = 1; } virtual void Proc1(); virtual void Proc2(); }; class Test1 {
阅读全文
摘要:# 虚函数 C++通过关键字virtual来将函数声明为一个虚函数。当一个类包含虚函数后编译器就会给类的实例对象增加一个虚表指针,所谓的虚表指针就是指向虚表的指针。虚表就是一张地址表,它包含了这个类中所有虚函数的地址。对象所在内存的前四个字节就是虚表指针。 ``` class Test { publ
阅读全文
摘要:# 内存对齐的原因 为了提高程序的性能,数据结构(尤其是栈)应该尽可能地在自然边界上对齐。因为为了访问未对齐的内存,CPU需要作两次内存访问。然而,对齐的内存访问仅需要一次访问。 # 内存对齐的规则 1、数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在of
阅读全文
摘要:对象不使用默认析构函数 class Test { public: char cNum1; int iNum2; int* pInt; }; Test _ReturnObject() { Test stLocalObject; stLocalObject.cNum1 = 0; stLocalObjec
阅读全文
摘要:前言 以前对c++的new[]的了解就是开辟一块内存,直到我最近在程序中用到它才发现我的了解太浅。 问题分析 new[]得到的内存空间不会自动初始化 new[]是在堆区中动态分配指定大小的内存,但是这块内存并不会自动进行初始化。也就是说这块内存并不会被置0,所以当堆中申请的内存中原有数据会被保留成为
阅读全文
摘要:27. 区分内存分配的方式 c++中内存分为5个不同的区 ①栈区 栈是一种特殊的数据结构,其存取数据特点为(先进后出,后进先出)。栈区中主要用于存储一些函数的入口地址,函数调用时的实参值以及局部变量。栈区的大小和内存分配由编译器和底层硬件配合完成在函数调用时发挥很大作用,但是程序员不需要关心其的操作
阅读全文
摘要:19. 明白在c++中如何使用c c++可以兼容c的绝大部分代码,但是还是有一部分不能兼容。 c语言的编译器在调用函数时会把函数翻译成 : “_函数名”,例如: int nasa(int a,intb) c语言编译器会将其翻译成:“_nasa”的形式,当调用此函数时就去寻找这个字符串。 c++语言的
阅读全文
摘要:12.优先使用前置操作符 #include <iostream> using namespace std; class A { private: int num; public: A operator++(); //前置++ A operator++(int); //后置++ }; A A::ope
阅读全文
摘要:10. 优化结构体中元素的布局 结构体变量所占空间大小并不是其所含类型所占字节数之和,其所占内存字节数涉及到字节对齐。 字节对齐 :变量在内存中储存都是以字节数为单位,每一个字节都有自己的地址,逻辑上变量的首地址(第一个字节的地址)可以是任意位置,但实际不同类型变量其首地址是有一定规则的,这是为了更
阅读全文
摘要:0. 不要让main 函数返回 void 入口函数main()返回类型应该为 int, 即程序结束时return 0 表示程序正常返回,函数结束时 return -1 值表示程序异常返回, 如果不显式写出 return 语句,编译器会隐式的加上 return 0(并不要以为main函数可以无返回值)
阅读全文