c++
ASX20042005
这个作者很懒,什么都没留下…
展开
-
多重继承与虚继承 对象布局
一.多重继承#include using namespace std; class Base1{public: Base1(){ cout "Base1::Base1()" virtual ~Base1(){ cout "Base1::~Base1()" virtual void speakClearly(){ cout "转载 2012-01-04 10:54:51 · 374 阅读 · 0 评论 -
利用C++模板,代替虚函数实现类的静态多态性
熟悉模板编程的朋友或许听到过这个技巧或者模式:Barton-Nackmann 技巧或者称 奇异循环模板模式(Curiously Recurring Template Prattern)。 其实在 《c++ 编程语言》这本bible 书里,在模板那章提到过一个很奇妙的类的实现,用的就是这个技术。当时,我就被C++模板技术叹为观止。近期在学boost库时偶然碰到了这个技巧,同时在写一个类时引转载 2012-03-07 09:46:07 · 551 阅读 · 0 评论 -
Google Protobuf - 实现跨平台跨语言的序列化/反序列化
转载请注明来自“柳大的CSDN博客”:Blog.CSDN.net/PoechantGoogle Protocol Buffer 是一个平台无关、语言无关的结构化数据的序列化与反序列化工具。1 Establish dev environmentwget http://protobuf.googlecode.com/files/protobuf-2.4.1.tar.gzt转载 2012-03-28 18:39:24 · 1789 阅读 · 0 评论 -
使用模板有什么缺点?如何避免?
文章来源:http://group.gimoo.net/review/82612templates(模板)是节省时间和避免代码重复的极好方法,我们可以只输入一个类模板,就能让编译器实例化所需要的很多个特定类及函数。类模板的成员函数只有被使用时才会被实例化,所以只有在每一个函数都在实际中被使用时,我们才会得到这些函数。确实这是一个很重要的技术,但是如果不小心,使用模板可能会导致代码膨胀。转载 2012-03-28 23:28:05 · 725 阅读 · 0 评论 -
C++箴言:理解typename的两个含义
template class Widget; // uses "class"template class Widget; // uses "typename" 答案:没什么不同。在声明一个 template type parameter(模板类型参数)的时候,class 和 typename 意味着完全相同的东西。一些程序员更喜欢在所有的时间都用 class,因为它更容易输入。其他人(包转载 2012-03-14 17:52:02 · 563 阅读 · 0 评论 -
Boost Thread学习笔记二
链接: http://hi.baidu.com/jrckkyy/blog/item/4aaccaf06f30c1ca7931aa90.htmlBoost Thread学习笔记二2009年07月22日 星期三 下午 6:05除了thread,boost::thread另一个重要组成部分是mutex,以及工作在mutex上的boost::mutex::scoped_lo转载 2012-04-15 22:22:25 · 606 阅读 · 0 评论 -
C/C++语言不常用的几个关键字
连接: http://blog.chinaunix.net/uid-20484604-id-1941283.htmlmutable关键字关键字mutable是C++中一个不常用的关键字,他只能用于类的非静态和非常量数据成员我们知道一个对象的状态由该对象的非静态数据成员决定,所以随着数据成员的改变,对像的状态也会随之发生变化!如果一个类的成员函数被声明为const类型,表示该函数转载 2012-05-19 01:16:23 · 732 阅读 · 0 评论 -
Implementing operator->* for Smart Pointers
http://collaboration.cmc.ec.gc.ca/science/rpn/biblio/ddj/Website/articles/DDJ/1999/9910/9910b/9910b.htm#l14 Implementing operator->* for Smart PointersDr. Dobb's Journal October 1999Classe转载 2012-06-20 00:14:47 · 1176 阅读 · 0 评论 -
LINUX多线程互斥量和读写锁区别
线程的同步, 发生在多个线程共享相同内存的时候, 这时要保证每个线程在每个时刻看到的共享数据是一致的. 如果每个线程使用的变量都是其他线程不会使用的(read & write), 或者变量是只读的, 就不存在一致性问题. 但是, 如果两个或两个以上的线程可以read/write一个变量时, 就需要对线程进行同步, 以确保它们在访问该变量时, 不会得到无效的值, 同时也可以唯一地修改该变量并使它生效转载 2012-03-05 11:00:18 · 420 阅读 · 0 评论 -
用C++实现多线程Mutex锁(Win32)
本文目的:用C++和Windows的互斥对象(Mutex)来实现线程同步锁。 准备知识:1,内核对象互斥体(Mutex)的工作机理,WaitForSingleObject函数的用法,这些可以从MSDN获取详情; 2,当两个或更多线程需要同时访问一个共享资源时,系统需要使用同步机制来确保一次只有一个线程使用该资源。Mutex 是同步基元,它只向一个线程授予对共享资源的独占访问权。如果一个线转载 2012-03-05 10:57:58 · 489 阅读 · 0 评论 -
互斥对象锁和临界区锁性能比较
http://blog.csdn.net/chexlong/article/details/7060425 在Win32平台上进行多线程编程,常会用到锁。下边用C++实现了互斥对象(Mutex)锁和临界区(CRITICAL_SECTION)锁,以加深理解和今后方便使用。代码已在VS2005环境下编译测试通过。Lock.h[cpp] view plaincopy转载 2012-03-05 10:55:12 · 584 阅读 · 0 评论 -
C++ 虚函数表解析
C++ 虚函数表解析 陈皓http://blog.csdn.net/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,R转载 2012-02-21 10:03:19 · 326 阅读 · 0 评论 -
Boost智能指针——weak_ptr
Boost智能指针——weak_ptr循环引用:引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理循环引用的对象。一个简单的例子如下:#include#include#include#includeclass parent;class children;typedef boost::shared_ptr parent_ptr;转载 2012-03-02 13:02:01 · 438 阅读 · 0 评论 -
boost::share_ptr智能指针使用示例
http://ticktick.blog.51cto.com/823160/196765最近项目中使用boost库的智能指针,感觉智能指针还是蛮强大的,在此贴出自己学习过程中编写的测试代码,以供其他想了解boost智能指针的朋友参考,有讲得不正确之处欢迎指出讨论。当然,使用boost智能指针首先要编译boost库,具体方法可以网上查询,在此不再赘述。 智能指针转载 2012-03-02 13:03:11 · 2759 阅读 · 1 评论 -
Boost智能指针——shared_ptr
boost::scoped_ptr虽然简单易用,但它不能共享所有权的特性却大大限制了其使用范围,而boost::shared_ptr可以解决这一局限。顾名思义,boost::shared_ptr是可以共享所有权的智能指针,首先让我们通过一个例子看看它的基本用法:#include#include#includeclass implementation{public:转载 2012-03-02 13:13:44 · 765 阅读 · 0 评论 -
Boost智能指针——scoped_ptr
boost::scoped_ptr和std::auto_ptr非常类似,是一个简单的智能指针,它能够保证在离开作用域后对象被自动释放。下列代码演示了该指针的基本应用:#include#include#includeclass implementation{public: ~implementation() { std::cout "de转载 2012-03-02 13:19:56 · 462 阅读 · 0 评论 -
Boost的转换函数(一)
Boost的转换函数是对C++中的四种类型转换函数(const_cast,reinterpret_cast,static_cast,dynamic_cast)的一些补充和扩展,在阅读本文前,请先熟悉C++中的四种类型转换函数相关知识。polymorphic_castC++提供了dynamic_cast来实现运行时的类型转换,但是如果用来转换指针时,需要记得检查返回值(这转载 2012-03-02 13:28:07 · 404 阅读 · 0 评论 -
Boost的转换函数(二)
boost::numeric_cast在c++中,我们经常需要把不同类型的数字互相转换,如将一个数字在long和short之间转换。但由于各数字的精度不同,当一个数字从"大"类型到"小"类型就可能导致转换失败,如下所示:long n1 = 99999999;short n2 = static_castshort>(n1);对于如上转换,n2得到的是一个负数,显然这个不是我们所期望的转载 2012-03-02 13:29:05 · 402 阅读 · 0 评论 -
Linux平台上用C++实现多线程互斥锁
在上篇用C++实现了Win32平台上的多线程互斥锁,这次写个Linux平台上的,同样参考了开源项目C++ Sockets的代码,在此对这些给开源项目做出贡献的斗士们表示感谢! 下边分别是互斥锁类和测试代码,已经在Fedora 13虚拟机上测试通过。Lock.h[cpp] view plaincopy#ifndef _Lock_H #define _Loc转载 2012-03-05 10:56:34 · 546 阅读 · 0 评论 -
操作符重载手册
操作符重载手册反正我是总忘了某些重载如何写,从网上弄下来这篇文章,需要的时候查阅一下,很舒服。共享之!一、重载规则I.可以重载的操作符+ - * / % ^ & | ~ ! = > < += -= *= /= %= ^= &= |= >> << >>= <<= == != >= <=转载 2012-06-20 00:08:48 · 594 阅读 · 0 评论