如何在不复制数据和不暴露指针的情况下将数据对象检索给用户?

时间:2014-10-04 11:01:11

标签: c++ oop data-structures

我正在尝试构建一个包含数据结构的类,该数据结构包含我的数据对象。 用户可以使用我的类中的函数来检索其中一个对象(通过对象键)。

我可以不将对象复制到返回对象而不返回指针(这样用户无法更新我的数据)吗? 我不小心改变我的数据对象来解决这个问题。

为了简单起见我用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;
} 

非常感谢!

1 个答案:

答案 0 :(得分:4)

返回一个const引用:

const CData& CMyDataContainer::GetDataByID(CString sID)

这是正确的语义,表明您的用户不应该修改它。