如何在不复制数据和不公开指针的情况下向用户检索数据对象
How to retrieve data object to the user without copying the data and without exposing the pointer?
我正在尝试构建一个类,该类包含一个数据结构,其中包含我的数据对象。
用户可以使用类中的函数来检索其中一个对象(通过对象键)。
我可以在不将对象复制到返回对象并且不返回指针的情况下完成吗(这样用户就无法更新我的数据)?
我不想包装或更改我的数据对象来解决这个问题。
为了简单起见,我用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)
这是正确的语义,表明您的用户不应该修改它。
相关文章:
- 如何在没有数据拷贝的情况下从指针创建一个Eigen VectorXd对象
- QT QOpenGLWidget:如何在不使用数据块复制的情况下修改VBO中的单个顶点值?
- 如何在不破坏现有应用程序的情况下更改 API 中 stl 容器的数据类型?
- 在 C++ 中,默认情况下构造函数为类的数据成员提供的值是多少?
- 在不复制数据的情况下,将double数组转换为只有double成员的structs数组
- 有没有一种方法可以在不复制数据的情况下从string_view创建字符串流
- 串行读取()不会在没有数据接收的情况下返回值
- 如何在不复制数据的情况下将 cv::Mat 转换为 2d 标准::矢量
- 如何在没有缓冲的情况下使用 parquet-cpp 写入面向流/行的数据?
- 在不编写显式 setter 的情况下修改私有类数据成员的便捷方法是什么?模板有用吗?
- 在不减慢线程速度的情况下保存大量数据
- 如何对 int 变量应用验证,使其仅接受整数数据,并且在任何其他数据的情况下不会出错?
- 如何在没有性能命中的情况下抽象SIMD代码来处理不同的数据类型
- 是否可以在不分配内存或复制数据的情况下构造对象?
- 如何在不复制数据的情况下在平面数组和多维数组之间进行转换?
- 对象无法访问其私人数据.错误:在这种情况下私有
- 如何在不重写整个视频文件的情况下仅替换流中的一个数据框架?(ffmpeg)
- 给定一个填充无符号字符**的 C 函数,如何在没有中间副本的情况下用数据填充 std::vector
- 为什么在以下情况下没有数据竞争
- 在不复制数据的情况下更改 opencv mat 中的列顺序