随笔分类 - C/C++知识
总结各种C/C++的知识点
[设计模式]单例模式
摘要:设计模式中最简单的,用的也很广泛的,恐怕就是单粒模式。下面是单粒模式的几个思考:1)如果是懒初始化,内存在哪释放? 1.1 外部删除 1.2 开发接口,安全删除 1.3 额为增加一个静态类成员,在系统退出的时候,会调用成员的析构函数,然后在析构函数里面释放内存。2)它与静态方法的区别: 1.1 静态方法不需要一个实例,它访问的成员变量都是静态的。 1.2 单粒模式可以被继承,可以实现多态,可以延迟初始化。
阅读全文
【C++】函数指针
摘要:函数指针中需要注意如下几点:1)函数运算符(),数组运算符[]优先级高于指针运算符*。所以int *fn(); 表示 一个返回值为int *的函数int (*fn)() 表示返回值为int的函数指针。2)类成员函数函数指针表示方法:void (A::*fn)();即用ClassName::*来代替*其他的和普通的函数指针一样。
阅读全文
[C++]函数查找规则
摘要:我们定义了一个类,里面有很多方法,我们调用的其中某个方法,如何确定调用了哪些方法呢?首先,我们知道函数查找的顺序如下:1)查找函数的名字2)从中找出最佳匹配。3)检查是否具有该函数的访问权限4)实参相依原则:根据实参的类型,自动进入相应的命名空间、类内部进行查找。增加一条:派生类成员按名字隐藏掉基类成员class Base {public: virtual void f(int x);};class Derived: public Base {public: virtual void f(double *pd);};Derived *pd = new Derived;pd->f(10);
阅读全文
C++中调用C语言库文件
摘要:我们都知道C++语言兼容C语言,那么C++调用C语言库,为什么为什么需要 extern "C"的帮助?答案就是C++语言为了支持重构(重构的特征:相同的范围、相同的名字、不同的参数),在编译时对函数的命名方式进行了改变,编译后的名字包括一些参数的信息,这样才能在调用函数的时候对号入座。那么extern "C"的作用,就是“提示”(为什么说提示,而不是“命令&r...
阅读全文
详细分析内存泄露检测
摘要:前段时间,做课程设计,题目是:Windows平台下内存泄露的检测。下面就摘抄其中的一部分,作为博客的内容,以供自己日后参考。 这里顺便谈一下new[]、new delete[]、delete之间的区别于连续 其中 operatornew[]和Operator delete[] 是通过调用operator new和Operator delete来实现的,而且完全一样(就是说所分配、释放内存时的...
阅读全文
设计模式之我的理解:构建型模式:抽象工厂
摘要:1. 意图提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。即它是用来创建一系统相关或相互依赖的对象:如窗口上的scroll bar和边框等。它可以用工厂方法或者原型方法来实现。具体内容待原型方法总结后给以补充。
阅读全文
设计模式之我的理解----创建型模式:工厂方法
摘要:Factory Methory1. 意图定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。怎么理解呢?1)工厂("Factory")就是用来“Create Product”的,所以它需要定义一个用于Create Object的接口。 还记得面向对象设计的原则不,我们的编程对象是接口,而不是具体实现。2)我们用子类...
阅读全文
size_t
摘要:MSDN中的解释:size_t unsigned integerResult of sizeof operator. 也就是说size_t是unsigned integer即无符号整数。那为什么会有size_t这个类型呢?因为不同平台的操作系统(32/64)中int/long等类型所占的字节并不一样,而size_t在不同的平台下有不同的定义。有点类似于TCHAR#ifndef _SIZE_T_D...
阅读全文
__stacall __cdecl区别
摘要:__stdcall __cdecl之间的区别:该由谁来释放堆栈资源。__stdcall 由被调用者来释放。大部分的Windows API均采用此方式。__cdcel 由调用者来释放。c++中大部分采用但是此释放方式。但对于可变参数列表,只能采用__cdcel,因为被调用者,不清楚函数调用时堆栈中参数的数量。共同点:入栈方式都是从右到左。参见的定义:#define WINAPI __stdcall#...
阅读全文
C++ 类型转换
摘要:reinterpret_cast 用法:reinpreter_cast<type-id> (expression)type-id必须是一个指针、引用、算术类型、函数指针或者成员指针。 可以转换任意一个32bit整数,包括所有的指针和整数。可以把任何整数转成指针,也可以把任何指针转成整数,以及把指针转化为任意类型的指针,威力最为强大!但不能将非32bit的实例转成指针。总之,只要是32b...
阅读全文
C/C++常见笔试题目
摘要:1、引用和指针的区别 1.1 引用不能为NULL 1.2 引用必须要初始化 1.3 引用初始化后,不可指向其他对象 1.4 作为参数传递的时候,不会生产形参。返回引用的时候,不会产生临时变量。 const 指针也有可能产生野指针。 引用具有指针的效率,也具有方便性和直观性。2、区别函数重载可以是 4.1 利用了无符号数和有符号数相减结果为无符号数的性质。 #include<stdio.h&g...
阅读全文
单例模式
摘要:但是有个问题,就是存在个问题:1、容易造成内存泄漏和不能正确析构执行 原因,系统不知道什么时候可以删除m_pInstance这个指针所指向的对象。 解决办法: a、自己来删除,delete掉。 b、定义一个static的对象而不是指针:具体实现参考如下:这也存在一个小问题:使用局部静态变量,非常强大的方法,完全实现了单例的特性,而且代码量更少,也不用担心单例销毁的问题。但使用此种方法也会出现问题,...
阅读全文
函数课重入性
摘要:以下内存是转载:源地址:http://blog.csdn.net/yueyahe/archive/2006/05/15/729126.aspx一、可重入函数1)什么是可重入性?可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反,不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。...
阅读全文
static知多少
摘要:以前也了解过static,知道它的生命周期是全局的,可以控制作用域。但却没有一个系统的归纳。现在我尝试归纳如下: 一:修饰变量,静态存储 一个static的变量,在编译的时候就被初始化了(如果没有主动初始化,会被初始化为0,这一点也被用于初始化稀疏矩阵),然后放在静态存储区中。 顺便补充一下存储区的知识:程序中的存储区分为静态存储区和堆栈。前者用于放两种数据:全局变量和static变量,这样只会被...
阅读全文
浙公网安备 33010602011771号