C/C++
文章平均质量分 57
liuxuejiang158
做点笔记,省的百度不到。。。
展开
-
检测内存泄漏
1.开发背景在 windows 下使用 VC 编程时,我们通常需要 DEBUG 模式下运行程序,而后调试器将在退出程序时,打印出程序运行过程中在堆上分配而没有释放的内存信息,其中包括代码文件名、行号以及内存大小。该功能是 MFC Framework 提供的内置机制,封装在其类结构体系内部。在 linux 或者 unix 下,我们的 C++ 程序缺乏相应的手段来检测内存信息,而只能使转载 2013-04-04 19:44:13 · 1146 阅读 · 0 评论 -
强制使用void*无类型的错误
void *则为“无类型指针”,void *可以指向任何类型的数据,任何类型的指针都可以直接赋值给它,无需进行强制类型转换,void *也可以无需强制类型转换地赋给其它类型的指针这是错的。因为“无类型”可以包容“有类型”,而“有类型”则不能包容“无类型”。为什么会写这个呢?是因为我想设计一个线程池的时候有很多不同类型的任务向通过void*传给线程池,然后通过void*指针执行任务,可是编译就没原创 2013-10-21 21:04:17 · 2087 阅读 · 0 评论 -
对象地址会不会成员所占内存变大而改变
#include#includeusing namespace std;class test{ public: void push(int num){ for(int i=0;i vec.push_back(i); } private: list vec原创 2013-10-22 13:16:26 · 1330 阅读 · 0 评论 -
抽象类的使用+虚析构
纯虚函数可以让类先具有一个操作名称,而没有操作内容,让派生类在继承时再去具体地给出定义。凡是含有纯虚函数的类叫做抽象类。这种类不能声明对象,只是作为基类为派生类服务。除非在派生类中完全实现基类中所有的的纯虚函数,否则,派生类也变成了抽象类,不能实例化对象。 定义虚函数是为了允许用基类的指针来调用子类的这个函数。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程原创 2013-10-23 10:36:37 · 2707 阅读 · 0 评论 -
Big Three+noncopyable
三法则的要求在于,假如类型有明显地定义下列其中一个成员函数,那么程序员必须连其他二个成员函数也一同编写至类型内,亦即下列三个成员函数缺一不可。 [1]: 析构函数(Destructor) 复制构造函数(copy constructor) 复制赋值运算符(copy assignment operator) 无论何时你需要定义析构函原创 2013-11-16 10:24:53 · 1213 阅读 · 0 评论 -
Boost::lambda
google了很久终于找到一篇我能读懂的lambda文章了,见传送门:http://club.topsage.com/thread-2276569-1-1.html例:采用lambda编写一个找出字符串中大写字母的程序#include#include#include#include#include#includeusing namespace std;using namesp原创 2013-11-29 17:41:06 · 1568 阅读 · 0 评论 -
Boost笔记(备查)
#include#include#include#include#includeusing namespace std;using namespace boost;class test:public enable_shared_from_this{public:test(){cout}shared_ptr get_shared(){shared_原创 2013-08-24 17:41:41 · 924 阅读 · 0 评论 -
Boost字符串分割split
boost中的split分割函数使用:#include#include#include#include#include#includeusing namespace std;using namespace boost;int main(){ ifstream in("1125.txt",ios::in); string s; getline(in,s);原创 2013-11-25 16:06:12 · 2727 阅读 · 0 评论 -
C++笔记(备查看)
基类的类的析构函数一般都是虚函数,为了当用一个基类的指针删除一个派生类的对象时,派生类的析构函数会被调用。含有纯虚函数的抽象类指针值为派生类对象时,实质是实例化的派生对象,此时如果基类和派生类有相同的函数,指针调用它是调用的基类成员函数(没有virtual前提下)原创 2013-08-06 15:05:51 · 1200 阅读 · 0 评论 -
C++内存分配new
new表达式在内存生存周期内创建并初始化对象(两阶段:1、调用operator new创建内存,2、调用构造函数构造对象)也就是说,动态创建的对象其生命周期可能超出其创建的作用域。new的语法为: ::(optional) new (placement_params)(optional) (type) initializer(optional) // 1) ::(opti原创 2014-05-23 14:09:31 · 3659 阅读 · 0 评论 -
Copy constructor拷贝构造函数
翻译的是wikipedia关于copy constructor,地址:http://en.wikipedia.org/wiki/Copy_constructor翻译 2014-07-03 14:12:09 · 2544 阅读 · 0 评论 -
构造/析构函数中不要调用虚函数
看到一句话:构造函数/析构函数中不要调用虚函数。 在建立一个对象时,会依次调用父构造函数->子构造函数,同样,在析构时也会逆过来调用子析构函数->父析构函数。那么在调用的时候,如果析构函数中对于虚函数还执行虚机制,就有可能已经执行过一个子对象的析构函数,又去调用子对象的函数,这样会很危险。所以在虚析构函数中,对于虚函数,只会执行目前最外一级的那个函数。 构造函数执行原创 2013-10-21 22:11:44 · 2506 阅读 · 0 评论 -
C++之const
const设计的本质是为了保护成员不被修改,但是在生产环境下会遇见许多情形,如下:#includeusing namespace std;class data{ public: void get(){ cout<<"data::get()"<<endl; }};class test{ public:原创 2013-10-20 11:54:07 · 1318 阅读 · 0 评论 -
内存调试技巧
引言C 和 C++ 程序中的内存错误非常有害:它们很常见,并且可能导致严重的后果。来自计算机应急响应小组(请参见参考资料)和供应商的许多最严重的安全公告都是由简单的内存错误造成的。自从 70 年代末期以来,C 程序员就一直讨论此类错误,但其影响在 2007 年仍然很大。更糟的是,如果按我的思路考虑,当今的许多 C 和 C++ 程序员可能都会认为内存错误是不可控制而又神秘的顽症,它们只能转载 2013-04-04 19:29:25 · 1072 阅读 · 0 评论 -
固定对象在堆或者栈上分配(还没有实验过)
相信一些朋友也碰见过这样的面试题目,本文尝试着给出解答.1. 分配对象在堆上 那么,必然要禁止对象在栈上面分配.一个很简单的办法,就是构造函数私有化(提供额外的接口生成对象),那么在栈上面就不可以分配.可是我们还需要这个对象要被析构,那么可以提供一个接口,显式的释放掉这个接口,也就是说delete也得给他禁掉~~~ 考虑另外一个问题,C++有placement new,转载 2013-04-04 21:40:45 · 1243 阅读 · 0 评论 -
分支语句和除法和写新文件
1 if() else() //else if() else()这是我真实的一个错误2 int a,b; float c=1-a/b;// c=1-(float)a/b;整数相除仍是整数在linux写入新文件,文件名前面别加.txt之类的windows思想,否则写出的结果为乱码原创 2013-04-22 22:35:49 · 1075 阅读 · 0 评论 -
处理Newman社交网络的数据
将Newman社交网络数据集格式转换为普通数据集程序,以备以后使用#include#include#include#includeusing namespace std;int main(){ ifstream in("../data/data/co_author.txt",ios_base::in); ofstream out("../data/data/co_author"原创 2013-04-23 20:03:36 · 1997 阅读 · 0 评论 -
我真这样做了
我真这样做了while(i>0){ .......}没有i--!!!!!!!!!!!!!!!!!!!!!!我真这样做了,我没救了原创 2013-05-10 17:12:37 · 1086 阅读 · 0 评论 -
函数返回指针
函数返回指针的情形:这个问题可以归结为堆栈问题参数外部变量静态变量在函数内部动态分配内存,返回这个内存地址,然后函数调用完后释放该内存注意:不能返回函数内变量形式的指针测试代码:/* *a fun() return a pointer,and test the pointer can be what? */#include#include#原创 2013-06-15 16:10:56 · 1611 阅读 · 0 评论 -
Muduo里的blockingQueue实现线程池伪码
#include #include #include #include #include templateclass BlockingQueue : boost::noncopyable{ public: BlockingQueue(): mutex_(),notEmpty_(mutex_),queue_(){} void put(const T& x) {原创 2013-09-09 22:28:59 · 1594 阅读 · 0 评论 -
Linux多线程服务端编程(笔记3_4)
每个进程都有自己的独立地址空间,线程的特点是共享地址空间从而可以高效的共享数据。 select和poll用来,支持Unix中I/O复用的功能,在Unix中I/O模型可以分为以一几种:阻塞IO应用进程产生一个system call ,如果内核没有数据准备好,则会一直wait,处于阻塞,当内核数据准备好之后,将会把数据从内核再拷贝到应用进程,这一copy过程也处于阻塞状态;非阻塞I/O,就意原创 2013-09-13 00:29:07 · 2088 阅读 · 0 评论 -
RAII封装mutex
#include#include#include#include#include#includeusing namespace std;using namespace boost;template//模板类封装class _LockGuard:boost::noncopyable{ public: explicit _LockGuard(Mutex& m)原创 2013-09-03 00:29:24 · 2020 阅读 · 0 评论 -
静态成员函数
一个类的静态成员函数只产生一个而无论生成的对象有多少个,且静态函数只能使用静态成员一段代码就能说明:#include#includeusing namespace std;class test{ public: static void fun(){ cout<<"fun() "<<i<<endl; //cou原创 2013-10-24 22:17:19 · 1212 阅读 · 0 评论 -
reserve和resize
void reserve (size_type n);Request a change in capacityRequests that the vector capacity be at least enough to contain n elements.If n is greater than the current vector capacity, the func原创 2014-08-01 20:07:40 · 1375 阅读 · 0 评论