
C/C++笔记
Zero游戏开发
一个无聊的人做一件有意思的事。
展开
-
C/C++编程教训----函数内静态类对象初始化非线程安全(C++11之前)
不少程序员在编写程序的时候,会使用函数内静态(static)变量,既能满足函数内这个变量可以持久的记录某些信息,又使其访问范围的控制局限于函数内。但函数内静态类对象初始化是非线程安全的。问题背景在我们产品中对log4cxx做了一些简单的封装 (采用VS2005编译),其中会调用到getWarn这个接口。由于这个函数存在非线程安全的问题,导致程序Crash。为了更好的描述问题,博主后面采用一个简...转载 2018-03-10 11:40:12 · 738 阅读 · 0 评论 -
map,unordered_map
Mapmap以键值对(key-value)的形式存在的一种关联容器,可以做到自动排序。删除或增加某个节点,只对操作的那个节点有影响,对其他无影响,对于迭代器来说只能修改实质,不能修改key。1.支持快速查找,查找的复杂度基本是Log(N)\2.快速插入,快速删除,快速修改Map有如此性质主要是因为其底层是基于红黑树详情参考:http://blog.youkuaiyun.com/u012062760/artic...原创 2018-03-10 11:22:46 · 386 阅读 · 0 评论 -
C++笔记整理(一)
1.C++中不能重载的六个运算符号:.,::,?,sizeof,typeid,*2.构造函数是否可以是虚函数?析构函数呢?答:构造函数不可以,虚函数是借助于虚函数表,而且是通过虚函数指针找到虚函数表,然而虚函数指针存在于对象之中,要有个对象才行,而调用构造函数的时候对象还没有建立,没有建立怎么会有虚函数指针呢?所以不可以。 析构函数可以当一个父类的析构函数被声明为虚函数的时候,我原创 2017-05-21 17:42:38 · 299 阅读 · 0 评论 -
(C++)Vector 简单的底层实现
Vector是最常用的一个容器了,常见的几个操作有:vector<int > a;创建对象vector<int> a(3);创建对象初始化为3vector<int> a(2,3)创建对象,初始化为2个3push_pack()尾部插入pop_back();返回尾元素size();返回容量大小insert()对应位置插入元素底层代码实现:#include<st...原创 2017-05-21 17:38:39 · 4053 阅读 · 0 评论 -
构造函数,析构函数,虚函数等易错混淆点
1.构造函数是否可以是虚函数?析构函数呢?答:构造函数不可以,虚函数是借助于虚函数表,而且是通过虚函数指针找到虚函数表,然而虚函数指针存在于对象之中,要有个对象才行,而调用构造函数的时候对象还没有建立,没有建立怎么会有虚函数指针呢?所以不可以。 析构函数可以当一个父类的析构函数被声明为虚函数的时候,我们delete一个指向子类对象的父类指针的时候,实际调用的是子类的析构函数,但是子类原创 2017-05-04 10:42:36 · 410 阅读 · 0 评论 -
动态内存之智能指针
一般情况下写的代码中的变量,函数等,他们的周期都是随着程序的结束而销毁,由系统分配,销毁,一般都存在栈中,而在程序中有一些内存是由我们手动释放或者定义,叫做堆。具体内容在:程序中的内存分配。 一般动态内存的分配饰通过new运算符分配,通过delete来释放,但是有时候会忘记释放,导致内存泄漏,或者有时候还在使用中就释放掉了,这时就会引起非法引用。所以标准库提供了智能指针:[1]s原创 2017-04-14 21:25:30 · 333 阅读 · 0 评论 -
(C基础)结构体,共用体,枚举
一 结构体在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。 结构体的定义:struct student { int a; char b; double原创 2017-03-14 19:24:47 · 336 阅读 · 0 评论 -
(C基础)字节,原码,反码,补码
文章仅是为了自己日后复习所用,也适用于和我一样的小白参考,如有错误请指出。一 字节(Btye),位(byte)数据存储以“字节”为单位存储,传输以“位”为单位。字节是一个8位的2进制。Byte数据类型(字节型)用一个字节(Byte)储存,可区别256个数字,取值范围:0到255。Byte是从0-255的无符号类型,所以不能表示负数。字母占一个字节,汉字2个原创 2017-03-13 20:55:34 · 1239 阅读 · 1 评论 -
(C基础)指针基础的乱七八糟 2017.3.12
文章仅是为了自己日后复习所用,也适用于和我一样的小白参考,如有错误请指出。指针(地址就是指针)int *p;//定义一个int型的指针int *p = &a;//给其赋值一个变量的地址称为该变量的指针存放该地址的变量就是指针变量指针变量的值就是地址int *p中*表示定义的变量是指针变量p才是指针变量而不是*pint*p;p=&a;*p=1//表示把原创 2017-03-12 17:48:40 · 360 阅读 · 0 评论 -
堆和栈的区别(转过无数次的文章)
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两转载 2017-03-18 19:34:49 · 347 阅读 · 0 评论 -
(C++基础)在32,64位系统下各类型的大小
不同的数据类型在不同的系统下所占大小不同,经过整理如下所示:原创 2017-03-18 18:49:03 · 731 阅读 · 0 评论 -
虚函数表解析
C++ 虚函数表解析 原创 2007年12月18日 22:07:00 标签:转载 2018-04-26 10:08:46 · 471 阅读 · 0 评论