1.问题
在java与c#中这是一个简单的问题,可以使用object对象来实现类型无关的数据结构,并且很好的解决了内存回收等问题. 【程序编程相关:PHP 5.0.1 中 GD2.0.28】 在很多用c++开发服务器产品时,需要将不同的数据类型存储到一个容器中(有点类似httpsession可以保存会话期间任意类型的数据),供其它使用程序查找. 【推荐阅读:网上取数据的一个例子】【扩展信息:无刷新取数据的一个例子】
但c++中很难做到这一点,c++是一门静态类型语言,没有一个所有类型的基类.2.一般方法 一般解决这个问题的办法是使用void*指针来存储数据,象下面的代码: map<string,void*> 但是这样带来几个问题: (1)因为c++在不知道类类型时无法正确的释放内存; (2)很多使用者使用它时,释放内存的时机难于确定; 3.让它正确释放内存 我们可以定义一个公共的基类,让所有需要放到容器的类型继承它 class object { public: virtual ~object(){cout<<"object destroy" << endl;} }; 由于使用了virtual析构函数因此可以确保delete obj的时可以正常工作.因此上面的容器定义变成了这样: map<string,object*> 4.让它知道何时释放内存 大家都知道,这时必须使用引用计数,不过很幸运有现成的,我们使用boost::share_ptr map<string,boost::share_ptr<object*> > 很好两个问题都已经解决,但如何向他们中加入c++的基本类型呢? 5.开发基本类型的封装类 基本类型很多,如果每一个都写一个类,太累了,我们可以定义一个模板,这里的难点是基本类型之间的操作符重载,不同类型之间的运算返回的类型并不相同,这就需要写很多重载函数,在这里我们使用loki来简化这些操作.... 下一页