
C++
wayz11
这个作者很懒,什么都没留下…
展开
-
C++中单例模式对象的释放控制
单例模式也称为单件模式、单子模式。使用单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出等。单例模式有许多种实现方法,在C++中,甚至可以直接用一个全局变量做到这一点,但这样的代码显得很不优雅。《设计模式》一书中给出了一种很不错的实现,定义一个单例类,使用类的私有静态指针变量指向类的唯一实例,并用一个公有静态转载 2012-04-05 14:36:31 · 2057 阅读 · 0 评论 -
一个不起眼的手误,让我调了半小时
一个不起眼的手误,让我调了半小时,大家最好先别看解析部分,自己练一下眼里吧。运行是报段错误:(3077573488) starting up(3077573488) is exiting段错误下面给出错误代码: 1 #include 2 #include 3 #include 4 5 class ExitHandler : public ACE原创 2012-06-04 16:24:49 · 1305 阅读 · 0 评论 -
位运算总结
位操作是各种考试和面试中经常出的题型,在一些算法中使用位运算,不仅能提高效率,而且还能简化代码。约定1:本文中位操作所涉及的整数均指无符号整数。约定2:本文中以ALLBIT表示所有位都为1的整数。约定3:一个整数的最高位在左端,最小位在右端。在计算位的序号时,从右往左数。最低位的序号为1。位运算符&:与|:或~:非^:异或>>:右移集合操作我们可以用一个整数表示集合,例原创 2013-03-14 17:31:46 · 1318 阅读 · 0 评论 -
Linux 静态库的创建和使用
简介在linux下库分两种:静态库和共享(动态)库。这两种库的主要不同在于连接到程序的过程。在编译程序时,连接器(ld)负责把程序中不同的模块连接起来,产生最终的可执行文件。静态库就是在这一过程连接到程序,成为程序的一部分。共享库与此不同,在编译时加入程序的只是一些钩子,在程序运行的时候才需要把共享库调入以便运行。创建和使用静态库创建静态库:通常使用ar程序把一些目标文件(.o原创 2013-03-15 10:20:32 · 1578 阅读 · 0 评论 -
linux 动态库的创建和使用
简介动态库相比动态库有以下优点:由于不用静态连接到使用库的每个程序中,使用动态库更节省内存;升级方便,升级动态库,可以不用重新编译使用库的程序;注意:在x86架构下,使用动态库可能降低性能。创建和使用共享库我们使用上一篇《Linux 静态库的创建和使用》中的程序清单,只不过这次我们不生成静态库,而是生成动态库。同时为了方便我们使用Makefile文件。Makefile内原创 2013-03-18 10:10:01 · 1677 阅读 · 0 评论 -
Linux 共享库高级主题
ldd工具使用ldd工具用户可以查看可执行文件依赖的共享库,以及共享库的加载目录。可执行文件中包含了运行时所需的共享库列表。当可执行文件被运行时,系统负责装载所需的库文件。对《linux 动态库的创建和使用》生成的可执行程序使用ldd,输出结果如下:[wayz11@linux]$ ldd main linux-gate.so.1 => (0x00fea000)原创 2013-03-18 17:24:27 · 1374 阅读 · 0 评论 -
Linux 共享库LD_PRELOAD环境变量
共享库转载器有许多可供配置的环境变量,比如我们前面介绍的LD_LIBRARY_PATH环境变量。本文只重点介绍LD_PRELOAD环境变量,因为这个环境变量体现了共享库一个非常重要的特性:共享库覆盖。下面是man手册中对于LD_PRELOAD环境变量的介绍: A whitespace-separated list of additional, user-原创 2013-03-19 13:59:52 · 6790 阅读 · 0 评论 -
ACE_Message_Queue<ACE_MT_SYNCH>::putq ()使用时需要注意的地方
函数声明 templateint ACE_Task::putq ( ACE_Message_Block * , ACE_Time_Value * timeout = 0 ) timeout参数timeout参数使用绝对时间,而不是相对时间。使用时我们可以使用ACE_OS::gettimeofday ()获取系统当前时间,再加上一个相对时间来确定超时时间。原创 2013-03-21 17:46:19 · 2900 阅读 · 0 评论 -
error LNK2001: 无法解析的外部符号 __environ
在把一个Linux开源程序,移植到Windows的过程中遇到这个错误。使用vs2010 编译器。大致代码如下:#include ……extern char **environ; /* defined in run-time library */……for (n = 0, p = environ; (*p != (char *)NULL); ++p)原创 2013-10-18 17:09:39 · 1846 阅读 · 0 评论 -
浮点异常值:NAN,QNAN,SNAN
原文:浮点异常值:NAN,QNAN,SNAN32位浮点数在机器中的表示按照IEEE的标准是这样的: +------+----------------+-------------------------------+ | 1bit | 8bit | 23bit转载 2014-08-05 15:25:04 · 3134 阅读 · 0 评论 -
VS2010 专业版 报错:error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
安装vs2010专业版,随便写一个hello world程序,编译时报错:vs2015编译报错:错误 1 error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏解决方案:http://zhidao.baidu.com/link?url=GWR0OhrGoqoHu5fAVktzkHtIxPPxUZLZfR8X2IkQfBZ3UEckvW4rHFeWneTe转载 2016-04-21 15:48:37 · 813 阅读 · 0 评论 -
从ACE_TRACE到ACE_TMAIN
引言我们知道ACE日志宏是否产生日志方法调用,由三个配置在编译时的值决定:ACE_NTRACE、ACE_NDEBUG,以及ACE_NLOGGING。要启用相应的日志宏,需要定义相应的宏。ACE_NTRACE默认为1(禁用),ACE_NDEBUG和ACE_NLOGGING默认为未定义(启用)。通过在包含头文件“Log_Msg.h”头文件前定义ACE_NTRACE为0可以启用ACE_TRACE原创 2012-12-07 17:00:54 · 2403 阅读 · 0 评论 -
C++ Primer 5th Edtion 高清第五版新鲜出炉
C++ Primer 5th Edtion 高清第五版新鲜出炉,非扫描,带目录。不细说,你懂得!http://download.youkuaiyun.com/detail/wayz11/4553317原创 2012-09-07 10:01:19 · 4385 阅读 · 3 评论 -
ACE期货类ACE_Future返回异步调用结果原理解析
ACE_Future result = asynch_fun();在阅读主动对象模式示例代码时,看到ACE_Future类。异步调用直接返回ACE_Future对象。当异步调用完成时,返回的ACE_Future对象,将设置返回值。此时使用ACE_Future的方法ACE_Future::ready (void)将返回1。本文将探讨ACE_Future期货类是如何在异步调用完成后设置返回的ACE原创 2012-04-09 10:35:26 · 2088 阅读 · 0 评论 -
C、C++易错知识点杂记(1)
const char *p、char const *p和char *const p有什么区别?前两个可以互换。它们声明了一个指向字符常量的指针(这意味着不能改变他所指向的字符的值);“char *const p”声明了一个指向(可变)字符的指针常量,也就是说不能修改指针。char *(*pfpc)();遵循“声明模仿使用”原则逐步分解声明;注:[ ]和( )比 * 的结合度更紧。原创 2012-04-11 15:16:23 · 845 阅读 · 0 评论 -
C、C++易错知识点杂记(2)
有两个int型变量a和b,不用“if”,“swith”,“?:”或其它判断语句找出a,b中较大的。int max = (a + b + abs (a - b))/2不用中间变量,交换int型变量a和b的值方案一a = a + b;b = a - b;a = a - b;方案二a = a ^ b;b = a ^ b;a = a ^ b;注:异或运算原创 2012-04-18 10:16:10 · 643 阅读 · 0 评论 -
C、C++易错知识点杂记(4)
继承方式总结继承方式总结父类成员publicprivateprotectpublicprivateprotectpublicprivateprivate继承方式publicpublicpublicprivateprivateprivateprotectpr原创 2012-05-14 10:59:04 · 765 阅读 · 0 评论 -
启动ACE_TRACE日志
使用ACE_TRACE (msg)宏可以可以输出文件名,行号和msg。在其退出作用域时,显示“leaving msg”。因此用这个日志宏可以很方便的跟踪函数调用栈。这个日志宏,默认是关闭的。可以按如下方法启用这个日志宏。方法1:在#include 之前定义宏ACE_NTRACE#define ACE_NTRACE 0方法2:编译时添加选项-DACE_NTRA原创 2012-06-04 17:27:04 · 1849 阅读 · 0 评论 -
一道面试题
《程序员面试宝典》14.5 字符串其它问题 面试例题 6:(Page 217)有一个数组a[n],里面的数只有两种:-1或1。i、j是两个整数,假设0 感觉原文中给出的解法不正确,于是自己实现了一段代码。思路:从i = 0至n-1,依次求出以a[i]为结尾的序列的最大和maxSum[i],max ( maxSum[i] )即为最大和,其i值就是我们要求的end。同理从i=n-1至0,求原创 2012-05-21 10:24:25 · 692 阅读 · 0 评论 -
STL容器之 bitset
STL = Standard Template Library,标准模板库,已成为标准C++语言的一部分,有必要好好学习一下。STL包括容器和算法两部分。先系统的学习一下容器,然后在学习算法!1、STL容器容器是用来保存其它对象的对象。被保存的对象称为容器的元素。容器一般实现为模板类。容器为元素分配存储空间,并提供元素访问方法。stack,queue 和 priorit原创 2012-07-06 09:48:57 · 2666 阅读 · 1 评论 -
STL容器之 vector
vector是顺序容器,元素线性排列,使用连续内存。因此我们可以使用元素指针经过算数运算来引用其它元素。例如vector strvec;strvec.push_back ("Hello");strvec.push_back ("World");string *pptr = &strvec[0]; // pptr 指向“Hello”pptr ++; // pptr 指向“Worl原创 2012-07-16 16:33:12 · 863 阅读 · 0 评论 -
STL容器之 deque
deque是双端队列(double-ended queue)的缩写。deque是一种顺序容器,元素按线性次序排列。deque有如下的特性:元素可以通过索引下标访问。可以任意方向使用迭代器。元素可以高效的在首尾两端添加或删除。deque提供的功能和vector比较相似,不同之处在于,deque可以首尾高效的添加或删除元素,而vector只能在尾部添加删除元素。另外,与vector原创 2012-07-19 17:26:32 · 1504 阅读 · 0 评论 -
STL容器之list
list也是一个顺序容器。元素在容器线性排列。list中元素间的存储位置无关联,其元素的先后关系由链表指针表示。list容器有如下特点:在容器的任意位置高效的插入或删除元素(常量时间复杂度),而不仅仅是在头尾;可以在容器内或容器间高效的移动元素(常量时间复杂度);可以正向或反向遍历数组。相较于其它两种顺序容器(vector和deque),list在插入删除移动元素时的效率较高,原创 2012-07-20 16:13:16 · 1610 阅读 · 0 评论 -
返回类类型的函数
如果一个函数返回类类型,在编译器无优化的情况下,如果函数返回值不用于赋值或初始化变量,则调用类的拷贝构造函数将返回值赋给一个临时变量;如果返回值用于赋值,则先调用类的拷贝构造函数将返回值赋给一个临时变量,再调用赋值运算符,将临时变量赋值给被赋值的变量;如果返回值用于初始化类变量,则函数返回时,调用类的拷贝构造函数将返回值拷贝给被初始化的变量。以上三种情况参见下面的测试代码和输出:#原创 2012-08-22 10:02:29 · 2822 阅读 · 0 评论 -
试图将文件指针移动到文件开头之前
在Windows上使用ACE::truncate函数时报错:“试图将文件指针移动到文件开头之前”代码如下: // 指定文件大小 ACE_OFF_T offset = 3 * 1024 * 1024 * 1024; if (ACE_OS::truncate("Tick.data", offset) != 0) ACE_ERROR_RETURN((原创 2016-12-29 17:10:05 · 10698 阅读 · 0 评论