随笔分类 -  c/c++

摘要:setlocale 与 mbstowcs 的问题 Qiang Post in编程,Tags:c++,i18n 21 五月 2010 0 1 问题 2 原因 3 解 4 引申 1问题 在 Windows XP 多语言... 阅读全文
posted @ 2011-06-21 15:08 BloodAndBone 阅读(1420) 评论(0) 推荐(0) 编辑
摘要:对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 #include using namespace std;class CExample... 阅读全文
posted @ 2011-05-10 22:06 BloodAndBone 阅读(695) 评论(0) 推荐(0) 编辑
摘要:本文来自:http://zq2007.blog.hexun.com/8625800_d.html一些成员函数改变对象,一些成员函数不改变对象。例如: int Point::GetY(){return yVal;} 这个函数被调用时,不改变Point对象,而下面的函数改变Point对象: void Point:: SetPt (int x, int y){xVal=x;yVal=y;} 为了使成员函数的意义更加清楚,我们可在不改变对象的成员函数的函数原型中加上const说明: class Point { public:int GetX() const;int GetY() const;void 阅读全文
posted @ 2011-04-12 09:45 BloodAndBone 阅读(6578) 评论(0) 推荐(1) 编辑
摘要:#ifndef __HAVE_ARCH_STRNICMP/*** strnicmp - Case insensitive, length-limited string comparison* @s1: One string* @s2: The other string* @len: the maximum number of characters to compare*/int strnicmp(const char *s1, const char *s2, size_t len){/* Yes, Virginia, it had better be unsigned */unsigned c 阅读全文
posted @ 2011-03-21 18:57 BloodAndBone 阅读(1458) 评论(1) 推荐(1) 编辑
摘要:在实际应用中,遇到这样的情况:已分配好了一块内存,需要在这块内存上面分配一个类对象。这时可以通过强制类型转换,把该内存块强制转换成类对象: class A{}; char *p = new char[100]; A *pA = reinterpret_cast<A*>(p); 但是,这样转换的话,类的构造函数就没有得到调用,类成员变量就没有被初始化。 这个时候我们可以使用placement new来操作: #include <iostream> using namespace std; #pragma pack(push, 1) class CTest { public 阅读全文
posted @ 2011-02-18 15:22 BloodAndBone 阅读(376) 评论(0) 推荐(0) 编辑
摘要:看起来不可能的事情在C++中总能找到解决的办法。正如,直接调用构造函数是不可能的,然而可以用placement new 欺骗编译器调用构造函数。--------------------------------------------------1、placement new 为何物?placement new 是重载operator new 的一个标准、全局的版本,它不能够被自定义的版本代替(不像普通版本的operator new 和 operator delete能够被替换)。void *operator new( size_t, void *p ) throw() { return p; 阅读全文
posted @ 2011-02-18 15:00 BloodAndBone 阅读(1042) 评论(0) 推荐(0) 编辑
摘要:C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。 关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回收空间;(2) 为自定义类型分配和回收空间。 对于 (1),上面提供的程序a可以证明了 delete[] 和 delete 是等同的。程序a:#include <stdio.h>#define BUFF_SIZE 10240int main(int argc, char *argv[]){ printf("Hello, world\n"; c 阅读全文
posted @ 2011-02-18 14:27 BloodAndBone 阅读(139) 评论(0) 推荐(0) 编辑
摘要:想弄懂这个问题,首先你要弄清楚数据的3种存储方式。1。静态区:全局变量。2。堆:程序执行是分配的内存3。栈:函数调用,局部变量。new出来的内存就是分配到堆上的。程序执行完以后,堆上分配的内存不会被操作系统自动回收,所以你不delete掉的话,操作系统不回收,那块内存就成了没爹没娘的无业有民了,这个就叫内存泄露。我这样说你应该知道为什么书上为什么说new和delete要成对出现了吧。分配出来的内存记得自己回收掉。静态区和栈上面分配的内存操作系统会自动回收。所以不用delete了。另外,我觉得你好像没有搞清楚new出来了什么东西,delete掉了什么东西。我给你举例子说。int * pt;//声 阅读全文
posted @ 2011-02-18 14:15 BloodAndBone 阅读(442) 评论(0) 推荐(0) 编辑
摘要:new平常使用的new都是new operator(new操作符),它是语言内置的,无法重载。new的第一种写法://callnewoperatorint*p=newint(3);调用new operator后做了两件事:1、调用operator new分配内存。2、调用构造函数初始化对象。operator new声明如下://operatornew'sdeclarationvoid*operatornew(size_tsize);它可以被重载,但是第一个参数类型必须是size_t, 决定分配内存的大小。可以调用operator new只进行内存分配://calloperatornewvoid 阅读全文
posted @ 2011-02-18 14:14 BloodAndBone 阅读(313) 评论(0) 推荐(0) 编辑
摘要:一般来说new和delete要成对出现,在使用完new申请的内存后要马上释放。我相信持这种说法的人不止我们老师一个人,养成良好的内存使用习惯固然重要,但如果因此就认为new和delete必须成对出现,使用完new得到的空间后就要马上用delete释放的话,就有点“大材小用”了,相信C++提供这一由用户控制的内存控制方法也不是只限于如此的使用方法。正确灵活的,或许也是“高级”的使用方法,是在A处使用new申请一块内存,用一个指针指pA向它,之后在B处用指针pB指向pA所指向的空间,释放指针pA本身,接着释放pB所指向的内存空间,最后释放指针pB本身 阅读全文
posted @ 2011-02-18 14:13 BloodAndBone 阅读(250) 评论(0) 推荐(0) 编辑
摘要:#include <stddef.h>template<typename T>class Singleton{public: static T &getInstance () { if(NULL == instance) { instance = new T(); } return *instance; } static void delInstance () { if(NULL != instance) { delete instance; instance = NULL; } }protected: Singleton () { } ~Sing 阅读全文
posted @ 2011-02-15 15:07 BloodAndBone 阅读(387) 评论(0) 推荐(1) 编辑
摘要:./etc/init.d/vncserver startvim /root/.xstartupxsetroot - solid greyvncconfig - iconic &#xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &#twm &#exec wmaker#exec startkdegnome-session &chkconfig vncserver onvim /etc/sysconfig/vncserversVNCSERVERS="1:root"VNCSERVERARGS[1]="-geometry 1024 阅读全文
posted @ 2011-01-27 16:11 BloodAndBone 阅读(214) 评论(0) 推荐(0) 编辑
摘要:% vconfig Expecting argc to be 3-5, inclusive. Was: 1 Usage: add [interface-name] [vlan_id] rem [vlan-name] set_flag [interface-name] [flag-num] [0... 阅读全文
posted @ 2011-01-27 14:06 BloodAndBone 阅读(1449) 评论(0) 推荐(0) 编辑
摘要:From:http://www.ibm.com/developerworks/cn/linux/l-cppunit/便利的开发工具 CppUnit 快速使用指南李群 (liqun@nsfocus.com), 软件工程师李群,当前关注于网络安全产品的开发、研究;软件开发过程等方面。您可以通过 liqun@nsfocus.com和他联系。 简介:本文从开发人员的角度,介绍 CppUnit 框架,希望能够使开发人员用最少的代价尽快掌握这种技术。下面从基本原理,CppUnit 原理,手动使用步骤,通常使用步骤,其他实际问题等方面进行讨论。以下讨论基于 CppUnit1.8.0。标记本文!发布日期:20 阅读全文
posted @ 2011-01-20 17:21 BloodAndBone 阅读(404) 评论(0) 推荐(0) 编辑
摘要:官网:http://axis.apache.org/axis2/c/core/index.html设置AXIS2C_HOME路径:export AXIS2C_HOME=xxxexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$AXIS2C_HOME/lib设置wsdl2c.sh路径:export AXIS2_HOME=xxxexport PATH=$PATH:/opt/eucalyptus/packages/axis2c-1.6.0/bin/tools/wsdl2c/server端,生成so动态库:  gcc -olibhello.so -I$AXIS2C_HOM 阅读全文
posted @ 2011-01-12 11:25 BloodAndBone 阅读(775) 评论(0) 推荐(0) 编辑
摘要:#if defined(HAVE_ZLIB_H)#include zlib.h/* in file zlib.h, ZLIB_VERNUM is defined. */#endif#if defined(ZLIB_VERNUM) && (ZLIB_VERNUM = 0x1204)function1();function2();#define CAN_GZIP#endif#if defined (CAN_GZIP) z_stream strm; /* stream struct used by zlib */ int ret; /* return value of last inflate 阅读全文
posted @ 2011-01-10 10:47 BloodAndBone 阅读(1183) 评论(0) 推荐(0) 编辑
摘要:http://curl.haxx.se/ libcurl is a free and easy-to-use client-side URL transfer library, supporting DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP. libcurl supports SSL certificates, HTTP POST, HTTP PUT, FTP uplo 阅读全文
posted @ 2011-01-10 08:53 BloodAndBone 阅读(342) 评论(0) 推荐(0) 编辑
摘要:#include stdio.h#include stdlib.h#include stdarg.h#include string.h#include signal.h#include sys/types.h#include sys/stat.h#include linux/capability.h#define GETARG(a,x) (a-x##_arg)static int debug = 0;#define __die(condition,format,...) do { \ if(condition) {\ fprintf(stderr,"[erro 阅读全文
posted @ 2010-12-30 14:05 BloodAndBone 阅读(293) 评论(0) 推荐(0) 编辑
摘要:enumutype{INTEGER=1,STRING=2,GNUMBERS=3};structu_tag{enumutypeutype;/*theunion'sdiscriminant*/union{intival;char*pval;structgnumbersgn;}uval;};structxdr_discrimu_tag_arms[4]={{INTEGER,xdr_int},{GNUMBERS,xdr_gnumbers}{STRING,xdr_wrap_string},{__dontcare__,NULL}/*alwaysterminatearmswithaNULLxdr_proc*/ 阅读全文
posted @ 2010-12-30 13:58 BloodAndBone 阅读(293) 评论(0) 推荐(0) 编辑