现在位置: 首页 > 所有2012年发表的文章
1.问题阐述 C++类对象、DLL及COM都是面对向对象的,它们都实现了重用,避免了程序员重复造轮子的现象的产生。那么它们之间有什么区别呢? 2.实现技巧 C++对象重用是定义在源代码级别上的,而DLL和COM是定义在二进制级别上的重用,是执行代码重用的技术。     DLL和COM都实现了模块之间的通信,但是DLL对于内存的利用和数据类型使用没有一定的约束规范。而COM对数据、内存等其他的几个方面进行了规范,使得软件...
阅读全文
2012-11-24 21:58 工业·编程 ⁄ 共 1943字 暂无评论
    通过基类的指针来删除派生类的对象时,基类的析构函数应该是虚的。否则其删除效果将无法实现。一般情况下,这样的删除只能够删除基类对象,而不能删除子类对象,形成了删除一半形象,从而造成内存泄漏。 原因:     在公有继承中,基类对派生类及其对象的操作,只能影响到那些从基类继承下来的成员。如果想要用基类对非继承成员进行操作,则要把基类的这个操作(函数)定义为虚函数。那么...
阅读全文
2012-11-24 21:51 工业·编程 ⁄ 共 3668字 暂无评论
    对于程序员来说,Linux中有两种可访问的存储器 1.用户程序运行的虚拟存储空间 2.寄存器存储器 最常见的内存错误是碰到"Segmentation violation"的错误,这是内存错误产生位置的警告信息,可以通过gdb来定位.以下讨论是一些不那么明显的错误 内存错误。 堆内存错误Heap memory errors: 试图释放free已经释放free的内存 释放free并未分配的内存 试图写已经释放free的内存 ...
阅读全文
2012-11-24 21:49 工业·编程 ⁄ 共 2556字 评论 1 条
    在程序的开发过程中,经常会遇到调用第三方应用程序的情况,这个时候获取第三方程序的输出就事关重大。那么如何获取第三方程序的输出呢? 1.使用CreateProcess,利用管道机制。下面的代码获取了console.exe程序的输出,其参数为-a -b, 可根据情况而变。本程序利用了MFC库。 int main() {        SECURITY_ATTRIBUTES sa; HANDLE hRead,hWrite; sa.nLength = size...
阅读全文
2012-11-24 21:47 工业·编程 ⁄ 共 141字 暂无评论
1.动态分配的对象数组的使用了delete来释放,而非delete[] 2.使用single模式,忘记删除静态指针 3.类内成员进行了动态分配,析构函数中忘记释放 4.基类的析构函数没有定义为virtual,但是通过基类的指针去删除子类 5.释放责任的转移也可能产生内存泄漏 6.指针重新赋值
阅读全文
2012-11-24 21:45 工业·编程 ⁄ 共 8506字 暂无评论
优化是一个非常大的主题,本文并不是去深入探讨性能分析理论,算法的效率,况且我也没有这个能力。我只是想把一些可以简单的应用到你的C++代码中的优化技术总结在这里,这样,当你遇到几种不同的编程策略的时候,就可以对每种策略的性能进行一个大概的估计。这也是本文的目的之所在。 一. 优化之前 在进行优化之前,我们首先应该做的是发现我们代码的瓶颈(bottleneck)在哪里。然而当你做这件事情的时候切忌从一个debug-v...
阅读全文
2012-11-24 21:43 工业·编程 ⁄ 共 3167字 暂无评论
操作系统的任务主要是合理地调配系统的各种资源,为各种程序的运行提供环境,它可以看作是硬件和应用软件之间的一个媒介。其中对内存的管理是系统的最主要的职责,怎么样使有限的内存用在刀刃上,怎么要保证系统本身所需的内存(以防止死机,在win2000和winxp里这一点已经做的非常好了),怎样克服各种硬件连接的瓶颈。 本文主要就这种硬件连接的瓶颈问题展开一些讨论。大家知道计算机的主要硬件,硬盘,内存和处理器之间的速...
阅读全文
1. 使用new动态分配内存:若没有足够内存,则new返回0(空值指针null pointer); 2. 不要使用delete释放不是new分配的内存,delete释放指针指向的内存,但不会删除指针本身; 3、对空值指针应用delete是安全的; 4、创建数组时的静态联编与动态联编:数组声名int a[10], 静态联编,数组的长度在编译时确定;用new[]创建数组,动态联编,运行时为数组分配内存空间。动态-运行时分配内存。    C++有3种管理数...
阅读全文
2012-11-24 21:30 工业·编程 ⁄ 共 7251字 暂无评论
    C++是一种复杂的编程语言,其中充满了各种微妙的陷阱。在C++中几乎有数不清的方式能把事情搞砸。幸运的是,如今的编译器已经足够智能化了,能够检测出相当多的这类编程陷阱并通过编译错误或编译警告来通知程序员。最终,如果处理得当的话,任何编译器能检查到的错误都不会是什么大问题,因为它们在编译时会被捕捉到,并在程序真正运行前得到解决。最坏的情况下,一个编译器能够捕获到的错误只会造成程序员一...
阅读全文
    在C/C++中指针给编码带来的极大的方便,但是同时由于分配的指针需要编程人员自行释放内存,因此容易造成内存泄漏,C++中自带的new/delete本身没有提供内存泄漏检测的功能,不过我们可以重载这两个函数来追踪内存的分配和释放,以此来检测程序是否出现了内存泄漏。算法的思想是在new一块内存时将该块内存的地址以及出现的文件和行号信息记录到一个map数据结构中,以内存地址作为key。释放该内存时将map中的该...
阅读全文