我正在尝试构建一个包含数据结构的类,该数据结构包含我的数据对象。 用户可以使用我的类中的函数来检索其中一个对象(通过对象键)。
我可以不将对象复制到返回对象而不返回指针(这样用户无法更新我的数据)吗? 我不小心改变我的数据对象来解决这个问题。
为了简单起见我用CData简单对象写了一个数组,这是我的代码:
class CData
{
public:
CData() {};
virtual ~CData() {};
CString m_sID;
CString m_sName;
};
class CMyDataContainer
{
public:
CMyDataContainer() {};
virtual ~CMyDataContainer() {};
CData GetDataByID(CString sID);
void AddData() {};
private:
CData ArrAllData[1000];
};
CData CMyDataContainer::GetDataByID(CString sID)
{
CData EmptyDataToRetrive;
// Find the data object
for (int i = 0; i < 1000; i++)
{
if (ArrAllData[i].m_sID == sID)
{
// Copying the object I've found to a new object
// Can I avoid this copy and return the user an object he can use but dont change
// My original object?
return ArrAllData[i];
}
}
return EmptyDataToRetrive;
}
非常感谢!
答案 0 :(得分:4)
返回一个const引用:
const CData& CMyDataContainer::GetDataByID(CString sID)
这是正确的语义,表明您的用户不应该修改它。