c/c++
文章平均质量分 79
为而不争熙
这个作者很懒,什么都没留下…
展开
-
C++ operator关键字(重载操作符)
http://blog.sina.com.cn/s/blog_4b3c1f950100kker.html转载 2015-10-17 16:15:36 · 349 阅读 · 0 评论 -
如何避免野指针
1. 初始化时 定义指针变量的时候,指针变量赋值成nullchar ** p = NULL;2 在释放的时候,判断是不是NULL3 释放完毕以后再赋值成null原创 2016-02-26 18:30:04 · 270 阅读 · 0 评论 -
构造函数中无法实现多态
#include using namespace std; class Parent { public: Parent() { this->printfn(); } virtual ~Parent(){} virtual void printfn() { cout <<原创 2016-03-23 11:03:41 · 841 阅读 · 0 评论 -
C++中智能指针的设计和使用
智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露。它的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针。每次创建类的新对象时,初始化指针并将引用计数置为1;当对象作为另一对象的副本而创建时,拷贝构造函数拷原创 2016-04-14 20:36:45 · 982 阅读 · 0 评论 -
深入探讨 内联函数和宏定义的区别
内联函数的执行过程与带参数宏定义很相似,但参数的处理不同。带参数的宏定义并不对参数进行运算,而是直接替换;内联函数首先是函数,这就意味着函数的很多性质都适用于内联函数,即内联函数先把参数表达式进行运算求值,然后把表达式的值传递给形式参数。 内联函数与带参数宏定义的另一个区别是,内联函数的参数类型和返回值类型在声明中都有明确的指定;而带参数宏定义的参数没有类型的概念,只有在宏展开以后,才由编原创 2016-05-27 11:26:24 · 1363 阅读 · 0 评论 -
深入内存模型和函数调用机制,理解析构函数的执行顺序
原文地址 http://tianchengming.com/post-229.html为什么析构函数的执行顺序是相反的。要搞清楚这个问题,首先要明白C++内存模型,也就是C++的代码和数据在内存中是如何存储的。C++内存模型和C语言类似(有部分细节不同),你可以参照C语言内存模型来理解。 在内存模型中有一块区域叫做栈区,它是由系统维护的(程序员无法操作)原创 2016-06-03 20:21:28 · 1043 阅读 · 0 评论 -
字符串流 istringstream 和 ostringstream 的用法
iostream 标准库支持内存中的输入/输出,只要将流与存储在程序内存中的 string 对象捆绑起来即可。此时,可使用 iostream 输入和输出操作符读写这个 string 对象。标准库定义了三种类型的字符串流: • istringstream,由 istream 派生而来,提供读 string 的功能。 • ostringstream,由 ostream 派生而来,提供写原创 2016-01-21 16:20:17 · 522 阅读 · 0 评论 -
dlopen的用法
1、前言 为了使程序方便扩展,具备通用性,可以采用插件形式。采用异步事件驱动模型,保证主程序逻辑不变,将各个业务已动态链接库的形式加载进来,这就是所谓的插件。linux提供了加载和处理动态链接库的系统调用,非常方便。本文先从使用上进行总结,涉及到基本的操作方法,关于动态链接库的本质及如何加载进来,需要进一步学习,后续继续补充。如何将程序设计为插件形式,挖掘出主题和业务之间的关系,需要进一原创 2016-08-08 15:57:13 · 13013 阅读 · 1 评论 -
c++虚函数实现机制
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的转载 2016-08-09 18:36:06 · 301 阅读 · 0 评论 -
拷贝构造,构造函数,析构函数的调用顺序
#include "iostream"using namespace std;class ABCD {public: ABCD(int a, int b, int c) { this->a = a; this->b = b; this->c = c; printf("ABCD() construct, a:%d,b:%d,c:%d \n", this->a, thi原创 2016-03-08 17:52:00 · 405 阅读 · 0 评论 -
C++初始化列表
1 C++中提供了初始化列表对成员变量进行初始化2 使用初始化列表出现原因:1.必须这样做:如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,而没有默认构造函数,(如果还有无参的构造函数,就会报错)这时要对这个类成员进行初始化,就必须调用这个类成员的带参数的构造函数,如果没有初始化列表,那么他将无法完成第一步,就会报错。2、类成原创 2016-03-08 17:48:06 · 265 阅读 · 0 评论 -
C++拷贝构造函数详解
一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp] view plain copyint a = 100; int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。原创 2016-03-07 15:10:32 · 329 阅读 · 0 评论 -
C++ operator关键字(重载操作符)
http://blog.sina.com.cn/s/blog_4b3c1f950100kker.html operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。 这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算符的使用方法与其原来一致,另一方面扩展其功能只能通过函数的转载 2015-10-07 10:28:07 · 270 阅读 · 0 评论 -
STL中 priority_queue的用法
最近要用到queue里的priority_queue,特意去学了下,总结下。priority_queue调用 STL里面的 make_heap(), pop_heap(), push_heap() 算法实现,也算是堆的另外一种形式。先写一个用 STL 里面堆算法实现的与真正的STL里面的 priority_queue用法相似的priority_queue, 以加深对 priority_queu原创 2015-10-25 15:39:02 · 264 阅读 · 0 评论 -
c/c++内存管理注意的问题
【传说中的林锐博士写的,转载一下】程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本章的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。7.1内存分配方式内存分配方式有三种: (呵呵,可能和我前面写过的5种内存区域不太一致,不过大致也说的差不多的)(1)从静态存储区域分配。内存在程序转载 2015-10-23 13:51:37 · 284 阅读 · 0 评论 -
c++中vector的用法
一、概述vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector是一个容器,它能够存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,可以动态改变大小。例如:int myHouse[100] ;// c语言风格vector vecMyHouse(100);// 采用vector当如上定义后,v原创 2015-10-12 14:09:24 · 720 阅读 · 0 评论 -
理解数组指针和指针数组的区别
数组指针与指针数组的区别在于:数组指针p是一个指针,而指针数组p是一个存放N个指针变量的数组。一、数组指针(也称行指针)定义: int (*p)[n] 重点:()优先级高([]、()的优先级是一样的,但它们的方向是从左至右的,所以先运行括号里的*p),首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个原创 2016-01-21 10:44:59 · 263 阅读 · 0 评论 -
STL 中map容器key和value排序问题
map是用来存放键值对的数据结构,可以很方便快速的根据key查到相应的value。假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区分),我们用map来进行存储就是个不错的选择。 我们这样定义,map<string, int>,其中学生姓名用string类型,作为Key;该学生的成绩用int类型,作为value。这样一来,我们可以根据学生姓名快速的查找到他的成绩。原创 2016-01-14 20:30:35 · 475 阅读 · 0 评论 -
链表逆置
int SList_revse(SLIST * pHead){ SLIST *p = NULL, *q = NULL, *t = NULL; if (pHead == NULL) { return -1; } if (pHead->next == NULL || pHead->next->next == NULL) { return 0; } //准备环境 p = p原创 2016-03-03 11:46:26 · 317 阅读 · 0 评论 -
守护进程的创建方法和步骤
转自http://blog.chinaunix.net/uid-25365622-id-3055635.html概念: 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器http原创 2016-08-21 16:33:37 · 371 阅读 · 0 评论