随笔分类 - C/C++
摘要:default delete
阅读全文
摘要:1)final类不能被继承。 2)final虚函数不能被重写。 class A { public: virtual void foo() {} }; class B: public A { public: void foo() final {} }; class C final: public B
阅读全文
摘要:1、如果构造函数是虚函数,则它需要通过类的虚表来调用,而虚表的指针保存在对象中,没有调用构造函数,就没有对象。
阅读全文
摘要:迭代器,通常指的是STL中容器的指针封装,用于指向容器中的元素。 1、序列容器 1)内存连续,如vector。 删除(erase)一个元素,会导致其后面的元素都向前移动,则对应的迭代器都会失效。 尾部添加(push_back)一个元素,如果引起内存重新分配,则迭代器全部失效。 2)内存不连续,如li
阅读全文
摘要:虚析构函数是为了解决基类指针指向派生类对象,并用基类指针delete派生类对象,导致的内存泄漏问题。 class Base { public: Base(){ a = 1; } // 1) virtual ~Base() { cout << "destruct base." << endl; } /
阅读全文
摘要:1、函数指针,用于保存函数的入口地址,即函数名。 // 函数指针的基本用法 // 声明一个函数 int func(int); // 写法1 // 定义一个函数指针 int (*fptr)(int); // 形式上只比函数多了一个*号和一对圆括号 // 写法2 // 声明一个函数指针类型 typede
阅读全文
摘要:在使用基本指针类型时,因为要手动释放指针指向的内存,常常容易造成内存泄漏,特别是异常分支很多的情况下。而智能指针类型就是将基本指针类型封装成模板类,以便更好地管理内存。 智能指针都包含一个explicit构造函数,因此基本指针类型不能隐式转换成智能指针,需要显式调用。 shared_ptr<doub
阅读全文
摘要:CMake是一个跨平台的自动化构建工具,使用CMakeLists.txt文件来描述构建过程,生成标准的构建文件,如UNIX下Makefile。 1、使用流程 1)编写CMakeLists.txt。 2)执行"cmake path"命令,其中path是CMakeLists.txt所在的目录。 3)在生
阅读全文
摘要:C++11中的11表示2011年的C++标准。 1、右值引用(rvalue reference)和移动(move)语义 1)作用:避免右值拷贝,而只是“移动”,减少拷贝开销。 2)右值:没有名字,不能取地址,不能修改。左值和右值没有严格的定义。 3)移动语义: 2、constexpr(常量表达式)
阅读全文
摘要:原子操作:任意时刻,最多只有一个线程能访问。 在C++11之前,通常使用pthread库进行多线程编程,需要创建锁,以及加解锁等操作来保证多线程对临界资源的原子操作。 // 模板类atomic<T> typedef atomic<int64_t> atomic_int64_t; 运算符重载 内存序(
阅读全文
摘要:C/C++程序分配的内存分为以下五种: 1、栈区(stack) 1)由系统自动分配并释放,存放函数形参和局部变量等,分配方式类似数据结构中的栈。 2)分配速度快。 2、堆区(heap) 1)由程序员分配并释放,分配方式类似数据结构中的链表(跟堆没关系)。 2)分配速度慢。 3、全局/静态区 1)存放
阅读全文
摘要:1、malloc:不初始化。 // 分配一块size字节大小的内存,并返回内存块起始位置的指针。 void* malloc (size_t size); 2、calloc:初始化为0。 // 分配一块内存,包含num个元素,每个元素size字节大小。 void* calloc (size_t num
阅读全文

浙公网安备 33010602011771号