如何在不复制数据和不公开指针的情况下向用户检索数据对象

How to retrieve data object to the user without copying the data and without exposing the pointer?

本文关键字:数据 情况下 用户 对象 检索 指针 复制      更新时间:2023-10-16

我正在尝试构建一个类,该类包含一个数据结构,其中包含我的数据对象。

用户可以使用类中的函数来检索其中一个对象(通过对象键)。

我可以在不将对象复制到返回对象并且不返回指针的情况下完成吗(这样用户就无法更新我的数据)?

我不想包装或更改我的数据对象来解决这个问题。

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

返回常量引用:

const CData& CMyDataContainer::GetDataByID(CString sID)

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

相关文章: