10 2013 档案
摘要:你的软件在某个时刻停止服务,CPU占用达到100%+,这种问题一个可能的原因是产生了死循环,假设程序某处存在潜在的死循环,并在某种条件下会引发,本文以一个示例来定位出现死循环的位置。当程序某处存在死循环,通常定位问题及缩小范围的方法是,在可疑的代码处加log,或者注释掉可疑代码,这对于容易重现问题的程序来说还好,但对于“偶尔”才会产生问题程序却很难调试,因为我们很难重现程序故障。本文所述的调试过程正是在这种情况下,假设问题已经出现,我们要求环境保护现场,即出问题的程序还在运行中。1.我们首先要知道是哪个线程出了问题:首先查一下出问题进程的pid,例如ovtsvn@ovtsvn:~/MASS4/
阅读全文
摘要:C++模板 模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。 模板是一种对类型进行参数化的工具; 通常有两种形式:函数模板和类模板; 函数模板针对仅参数类型不同的函数; 类模板针对仅数据成员和成员函数类型不同的类。 使用模板的目的就是能够让程序员编写与类型无关的代码。比如编写了一个交换两个整型int 类型的swap函数,这个函数就只能实现int 型,对double,字符这些类型无法实现,要实现这些类型的交换就要重新编写另一个swap函数。使用模板的目的就是要让这程序的实现与类型无关,比如...
阅读全文
摘要:QLabel 类代表标签,它是一个用于显示文本或图像的窗口部件。 构造 QLabel 类支持以下构造函数:[plain]view plaincopyQLabel(QWidget*parent=0,Qt::WindowFlagsf=0);QLabel(constQString&text,QWidget*parent=0,Qt::WindowFlagsf=0); 其中第二个构造函数能够同时通过参数 text 给出要显示的文本,因此是最常用的构造方式。 属性 QLabel 对象的显示内容可以通过属性获取或修改,相关成员函数如下:[plain]view plaincopyQSt...
阅读全文
摘要:find:在非string类型的容器里,可以直接找出所对应的元素.find函数需要几个参数:迭代器,下标值,所要找的元素vector a;find(a.begin(),a.end(),1);这句话就表示从a的头开始一直到尾,找到第一个值为1的元素,返回的是一个指向该元素的迭代器。
阅读全文
摘要:虚函数表对C++了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重要了,它就像一个地图一样,指明了实际所应该调用的函数。这里我们着重看一下这张虚函数表。C++的编译器应该是保证虚函数表的指针存在于对象实例中最前面的位置(这是为了保证取到虚函数表的有最高的性能——如果有多层继承或
阅读全文
摘要:一个类,有成员变量:静态与非静态之分;而成员函数有三种:静态的、非静态的、虚的。那么这些个东西在内存中到底是如何分配的呢?以一个例子来说明:#include"iostream.h"class CObject{public: static int a; CObject(); ~CObject(); void Fun();private: int m_count; int m_index;};VoidCObject::Fun(){ cout<<"Fun\n"<<endl;}CObject::CObject(){ cout<<
阅读全文