问C++中两种保存数据方法的区别解决方法
问C++中两种保存数据方法的区别
需要用一个容器保存多种数据类型
暂时想到以下两种方法
1、
容器中存储CData结构
2、
容器中存储CDataBase*指针
从实用角度考虑哪种更好?
另外众神牛们有没有更合适的方法?
------解决方案--------------------
第二种
原因,拷贝值很昂贵,拷贝地址很廉价(如果你的结构大的话)
但是如果你的结构体不够大,对性能要求不是很高就第一种,不容易出错
------解决方案--------------------
存地址.
------解决方案--------------------
存地址是最好的,但是不熟练的话容易出错,如程序性能要求不高的话建议用第一种,不容易出错。
------解决方案--------------------
地址,对象进行拷贝,需要调用拷贝构造函数等,代价比较大
需要用一个容器保存多种数据类型
暂时想到以下两种方法
1、
容器中存储CData结构
- C/C++ code
class CData { public: enum _Type_DataType { DT_..., DT_... }; void *m_pData; _Type_DataType m_type; }; CData a = con.getData(); if(a.m_type == DT_STRING) { string &str = &a.m_pData; }
2、
容器中存储CDataBase*指针
- C/C++ code
class CDataBase { enum_Type_DataType{DT_STRING,DT_POINTER}... vritual _Type_DataType getDataType(); }; class CDataString : public CDataBase,string { _Type_DataType getDataType(){return DT_STRING}; ... } CDataBase *p = con.getData(); if(p->getDataType()==DT_STRING) { CString &pstr = *p; }
从实用角度考虑哪种更好?
另外众神牛们有没有更合适的方法?
------解决方案--------------------
第二种
原因,拷贝值很昂贵,拷贝地址很廉价(如果你的结构大的话)
但是如果你的结构体不够大,对性能要求不是很高就第一种,不容易出错
------解决方案--------------------
存地址.
------解决方案--------------------
存地址是最好的,但是不熟练的话容易出错,如程序性能要求不高的话建议用第一种,不容易出错。
------解决方案--------------------
地址,对象进行拷贝,需要调用拷贝构造函数等,代价比较大