
C++
文章平均质量分 56
5C_King
Keep hungry , keep foolish 。。。
展开
-
C++异常处理机制核心观点
1. 如果使用普通的处理方式:ASSERT,return等已经足够简洁明了,请不要使用异常处理机制。 2. 比C的setjump,longjump优秀。3. 可以处理任意类型的异常。 4. 需要一定的开销,频繁执行的关键代码段避免使用。其强大的能力表现在:1) 把可能出现异常的代码和异常处理代码隔离开,结转载 2014-03-31 22:59:35 · 562 阅读 · 0 评论 -
句柄
句柄的物理实现可能有很多,一个整数,一个指针,一个结构都可以是一个句柄。不管如何实现,它都必然对应一个系统中的对象。这个对象可能是一块内存,可能是一个结构,也可能是你的设备(显示器,鼠标,键盘等)。这种对象通常是不希望你直接操作。为了让你能操作这个对象,于是就提供了这个句柄。操作对象的方法,通常是一个函数,而具体要指明操作的是哪一个对象,就是这个句柄。以文件句柄为例。在计算机内转载 2014-09-29 00:18:53 · 453 阅读 · 0 评论 -
chdir改变当前工作目录
chdir解释原创 2014-11-04 22:48:32 · 884 阅读 · 0 评论 -
C++inline函数阐述
在何时使用inline函数:首先,你可以使用inline函数完全取代表达式形式的宏定义。另外要注意,内联函数一般只会用在函数内容非常简单的时候,这是因为,内联函数的代码会在任何调用它的地方展开,如果函数太复杂,代码膨胀带来的恶果很可能会大于效率的提高带来的益处。内联函数最重要的使用地方是用于类的存取函数。 内联函数的编程风格(摘自高质量C++/C 编程指南)关键字inline必原创 2014-11-04 22:43:33 · 576 阅读 · 0 评论 -
函数调用规约(__stdcall 和 __cdecl 的区别浅析)
在CPU中,计算机没有办法知道一个函数调用需要多少个、什么样的参数,也没有硬件可以保存这些参数。也就是说,计算机不知道怎么给这个函数传递参数,传递参数的工作必须由函数调用者和函数本身来协调。为此,计算机提供了一种被称为栈的数据结构来支持参数传递。在参数传递中,有两个很重要的问题必须得到明确说明:当参数个数多于一个时,按照什么顺序把参数压入堆栈函数调用后,由谁来把堆栈恢复原装。在高级语言中,转载 2014-12-04 14:56:01 · 2605 阅读 · 0 评论 -
内存池实现示例
1.模板类定义(使用了模板以适应不同对象的内存需求,内存池中的内存块则是以基于链表的结构进行组织)#include #include #include #include template class MemPool{public: static void *operator new(size_t allocLen) { assert(si原创 2015-02-28 14:48:17 · 455 阅读 · 0 评论 -
windows判断某文件是否被已被占用
CString pPath("D:/1.txt");if(_waccess(pPath, 0)==0){ HANDLE Handle = CreateFile(pPath, GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if(INVALID_HANDLE_VALUE ==原创 2015-06-08 15:25:36 · 1261 阅读 · 0 评论 -
linux文件是否被当前进程外的其他进程打开
lsof命令的用法QProcess 调用shell命令,并获取标准输出内容: QString pPath = "/tmp/1.txt"; QProcess commandProcess; commandProcess.start("lsof", QStringList(pPath)); commandProcess.waitForStarted();原创 2015-06-08 16:03:25 · 1455 阅读 · 0 评论 -
QTreeWidget实现元素拖拽移动,并绘制插入点
#include "ctreewidget.h"#include #include #define BM_ICON_WIDTH 22CTreeWidget::CTreeWidget(QWidget *parent) : QTreeWidget(parent),m_child(true),m_newLine(QLine()), m_oldLine(QLine()){ t原创 2015-06-12 11:34:22 · 17998 阅读 · 9 评论 -
placement new的用法及用途
http://www.cppblog.com/kongque/archive/2010/02/20/108093.html转载 2015-10-18 21:18:16 · 390 阅读 · 0 评论 -
C++中DC的含义
全称Device Context设备描述表,C++中在所有类前加字母C,即CDC。要在窗口中输出文字或者显示图形,就需要用到设备描述表,即DC。DC是一个包含设备(物理输出设备,如显示器,以及设备驱动程序)信息的结构体,在Windows平台下,所有的图形操作都是利用DC来完成的。设备描述表是一个Windows数据结构,它包含了一个设备(比如显示器和打印机)绘图属性的相关信息。所有的绘图操作转载 2014-08-25 23:22:43 · 4831 阅读 · 0 评论 -
undefined reference to涉及的链接问题
在linux下,编译链接的时候,经常会遇到这样一个问题,undefined reference to.....,引起这个问题的原因在于在链接的时候缺少选项。下面举几个例子,并给出解决办法。1、undefined reference to `dlerror' undefined reference to `dlopen' undefined reference t转载 2014-09-19 18:27:51 · 692 阅读 · 0 评论 -
C++异常处理机制
try| throw | catch异常处理抛出异常即检测是否产生异常,在C++中,采用throw语句实现,如检测到产生异常,则抛出异常。如在try语句块的程序段中(包括在其中调用的函数)发现了异常,且抛弃了该异常,则这个异常就可以被try语句块后的某个catch语句所捕获并处理,捕获和处理的条件是被抛弃的异常的类型与catch的异常类型相匹配。由于C++使用数据类型来区分不同的异常,转载 2014-03-31 22:36:10 · 656 阅读 · 0 评论 -
Linux下利用backtrace追踪函数调用堆栈以及定位段错误
extern "C" void mySystemCatchFun();void sigroutine(int dunno);int main(int argc, char *argv[]){ //cnmps(); int appReturn ; mySystemCatchFun(); // char *tmp = getenv("MPS_HOME")原创 2014-04-09 22:33:50 · 987 阅读 · 0 评论 -
通过读取xml文件存储的可执行文件描述符,获取可执行文件名称,并启动可执行文件
int CKsMPSActions::parallelSlot(){ // 获得模块XML文件 QString sXMLPathName,szBinPath; QString exeName; QList exeStrList,describeList; if (!CKsPathManager::GetVelocityXMLPath(sXMLPathN原创 2014-04-09 22:48:45 · 628 阅读 · 0 评论 -
二级指针作为参数分析
二级指针可以表示传入参数,传出参数或者Value-result参数,转载 2014-04-21 22:03:46 · 1344 阅读 · 0 评论 -
指针作为返回值
如果返回值传出的是指针,和上一节通过参数传出指针类似,也分为两种情况:第一种是传出指向静态内存或已分配的动态内存的指针,例如localtime(3)和inet_ntoa(3),第二种是在函数中动态分配内存并传出指向这块内存的指针,例如malloc(3),这种情况通常还要实现一个释放内存的函数,转载 2014-04-21 22:19:21 · 1102 阅读 · 0 评论 -
回调函数与函数指针
1. 指针函数:指函数的返回值类型是一个指针类型,本质是一个函数,如int *function(void);返回值是int *,是一个指针;2. 函数指针:本质是一个指针,但是这个指针指向一个函数,这个指针就叫函数指针。可把函数指针传入另一个函数作为形参,实现回调。函数指针用途:调用函数;做函数的参数。3. 回调函数:参数是一个函数指针,调用者可以传递一个转载 2014-04-22 22:33:12 · 588 阅读 · 0 评论 -
int main(int argc, char *argv[])
int main(int argc, char *argv[]);argc是命令行参数的个数;argv是一个指向指针的指针,为什么不是指针数组呢?函数原型中的[]表示指针而不表示数组,等价于char **argv。那为什么要写成char *argv[]而不写成char **argv呢?这样写给读代码的人提供了有用信息,argv不是指向单个指针,而是指向一个指针数组的首元素。数组中每个元素都转载 2014-04-22 23:19:06 · 525 阅读 · 0 评论 -
编译和链接
源文件首先会生成中间目标文件,再由中间目标文件生成执行文件。在编译时,编译器只检测程序语法,和函数,变量是否被声明。如函数未被声明,编译器会给出警告,但可以生成Object File。而在链接程序时,链接器会在所有的Object File中找寻函数的实现,如找不到,会报链接错误码(Linker Error)。1. 编译:把源文件编译成中间代码文件,在Windows下即原创 2014-07-21 11:11:47 · 451 阅读 · 0 评论 -
句柄类
句柄类,也就是handle class,是C++中的一种重要的面向对象方法,其作用有两条:1. 减少头文件的编译依赖关系,让文件间的编译更加独立;2. 增加系统安全性,把类的实现细节和声明完全的分离开,让类的实现细节对于用户完全的不可见,增加信息的安全性。 在一些大型的系统中,编译源文件的代价往往非常大,特别是一些核心文件,往往很小的代码改动就能引起整个系统的重新编译,由于系统存在诸多的包原创 2015-11-03 10:28:30 · 471 阅读 · 0 评论