文章分类 -  c/c++

c++
摘要:1.new、delete、malloc、free关系delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化 阅读全文
posted @ 2011-12-21 14:04 madonion 阅读(520) 评论(0) 推荐(1)
摘要:C++虚函数和纯虚函数(1)来自:http://www.cnblogs.com/daoluanxiaozi/archive/2011/12/04/2275364.html感觉讲的很清楚。学习过C++类的继承与多态的时候,但是很多的童鞋回过头来都忘记之中关于虚函数和纯虚函数的细节,甚至将他们混淆。§虚函数虚函数是动态多态性的基础,其调用的方式是动态联编(又称晚期联编,简单解释为只有在程序运行时才决定调用基类的还是子类的,系统会根据基类指针所指向的对象来决定要调用的函数);非虚函数与其相反,是静态联编(调用已经在编译时期就决定了;在编译时期,系统已经根据指针所属的类型确定了要调用的函数) 阅读全文
posted @ 2011-12-04 16:12 madonion 阅读(164) 评论(0) 推荐(0)
摘要:正确的C++内存分区Posted on 2011-11-30 10:11BreakMind阅读(35)评论(1)编辑收藏前导:作为一个C++的菜鸟,一直对C++的内存分区比较晕乎,网络上的分配方式各式各样,让人看得云里雾里。网络上有一种分区,将C++内存分为:堆区、栈区、自由存储区、全局/静态存储区和常量存储区。个人认为这是完全错误的内存划分方式,误导我这样的菜鸟。鉴于此,我查找资料,整理出以下的结论。真正合理的C++的内存划分为栈区、堆区、全局区/静态区、字符串常量和代码区。这里去掉自由存储区,增加了代码区,理由会在下面讲到。栈区:由系统进行内存的管理。说明:主要存放函数的参数以及局部变量。 阅读全文
posted @ 2011-11-30 15:34 madonion 阅读(3054) 评论(0) 推荐(1)
摘要:一般函数指针和类的成员函数指针转载请注明原文网址:http://www.cnblogs.com/xianyunhe/archive/2011/11/26/2264709.html函数指针是通过指向函数的指针间接调用函数。函数指针可以实现对参数类型、参数顺序、返回值都相同的函数进行封装,是多态的一种实现方式。由于类的非静态成员函数中有一个隐形的this指针,因此,类的成员函数的指针和一般函数的指针的表现形式不一样。1、指向一般函数的指针函数指针的声明中就包括了函数的参数类型、顺序和返回值,只能把相匹配的函数地址赋值给函数指针。为了封装同类型的函数,可以把函数指针作为通用接口函数的参数,并通过函数 阅读全文
posted @ 2011-11-28 14:42 madonion 阅读(145) 评论(0) 推荐(0)
摘要:const限定修饰符用法总结(常量,指针,迭代器,函数参数,成员函数)2011-11-22 23:04 by AnnieKim, 933 visits,收藏,编辑在这里总结一下const限定修饰符的各种用法,都已经过vs2010测试。1) 声明及初始化const常量。在声明一个const常量时,必须对其初始化,否则会报错。1 const int constvar; //error2 const int constvar = 10; //ok但是,有一个例外的情况,就是extern进来的const常量不需要初始化(如果该常量其他地方确实有出现,这时将它extern进来并且初... 阅读全文
posted @ 2011-11-28 14:34 madonion 阅读(2960) 评论(0) 推荐(1)
摘要:多线程的那点儿事(之C++锁)分类:多线程编程2011-11-27 21:53370人阅读评论(2)收藏举报【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 编写程序不容易,编写多线程的程序更不容易。相信编写过多线程的程序都应该有这样的一个痛苦过程,什么样的情况呢?朋友们应该看一下代码就明白了,view plainvoiddata_process(){EnterCriticalSection();if(/*errorhappens*/){LeaveCriticalSection();return;}if(/*othererrorhappen 阅读全文
posted @ 2011-11-28 14:32 madonion 阅读(2297) 评论(0) 推荐(0)
摘要:多线程的那点儿事(基础篇)分类:多线程编程2011-11-22 21:114352人阅读评论(8)收藏举报【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 多线程编程是现代软件技术中很重要的一个环节。要弄懂多线程,这就要牵涉到多进程?当然,要了解到多进程,就要涉及到操作系统。不过大家也不要紧张,听我慢慢道来。这其中的环节其实并不复杂。 (1)单CPU下的多线程 在没有出现多核CPU之前,我们的计算资源是唯一的。如果系统中有多个任务要处理的话,那么就需要按照某种规则依次调度这些任务进行处理。什么规则呢?可以是一些简单的调度方法,比如说 1.. 阅读全文
posted @ 2011-11-27 16:33 madonion 阅读(137) 评论(0) 推荐(0)
摘要:C语言中最棘手问题的当属指针了,不过这也是C的精华所在。指针是一种数据类型,区别在于指针类型的值是一个内存地址。32位机器上,指针变量占用四个字节。往往你觉得你把指针弄的很透彻了,但你还是会做错题目,或许因为粗心,或许自己混淆了,总之指针问题真的很绕。最近笔者在看「程序员求职成功之路」,书中伊始讲的就是C语言指针,看完之后获益匪浅,特在此总结一下。1.先看一道经典的指针题目: #include <stdio.h> int main() { int a[5][10]; printf("%u,%u,%u\n",a,a+1,&a+1); r... 阅读全文
posted @ 2011-11-20 02:29 madonion 阅读(122) 评论(0) 推荐(0)
摘要:#include <iostream>#include <string>#include <regex>usingnamespace std;int main(){ string str("This expression could match from A and beyond. [ expression express ]"); string rs ="exp\\w*"; // 正则字符串,exp开始的单词 cout << str << endl; regex expression(rs); 阅读全文
posted @ 2011-11-18 00:19 madonion 阅读(237) 评论(0) 推荐(0)
摘要:现代C++风格的新元素关键词:C++,新元素 | 作者:唐尤华 |“C++11就像一门新的语言。” – Bjarne StroustrupC++11标准推出了很多有用的新特性。本文特别关注相比C++98更像是一门新语言的那部分特性,因为:这些特性改变了编写C++程序使用的代码风格和习语[TODO],通常也包括你设计C++函数库的方式。例如,你会看到更多参数和返回值类型为智能指针(smart pointer),同时也会看到函数通过值传递返回大型对象你将会发现在大多数的代码示例中充斥着新特性的身影。例如,几乎每5行现代C++代码示例都会使用到autoC++11的其他特性也很棒。但是请先熟悉下面这些 阅读全文
posted @ 2011-11-18 00:14 madonion 阅读(204) 评论(0) 推荐(0)