问C++中两种保存数据方法的区别需要用一个容器保存多种数据类型暂时想到以下两种方法1、容器中存储CData结
问C++中两种保存数据方法的区别
需要用一个容器保存多种数据类型
暂时想到以下两种方法
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;}从实用角度考虑哪种更好?
另外众神牛们有没有更合适的方法?
[解决办法]
第二种
原因,拷贝值很昂贵,拷贝地址很廉价(如果你的结构大的话)
但是如果你的结构体不够大,对性能要求不是很高就第一种,不容易出错
[解决办法]
存地址.
[解决办法]
存地址是最好的,但是不熟练的话容易出错,如程序性能要求不高的话建议用第一种,不容易出错。
[解决办法]
地址,对象进行拷贝,需要调用拷贝构造函数等,代价比较大
