【发布时间】:2011-06-18 09:59:06
【问题描述】:
所以有
struct ResultStructure
{
ResultStructure(const ResultStructure& other)
{
// copy code in here ? using memcpy ? how???
}
ResultStructure& operator=(const ResultStructure& other)
{
if (this != &other) {
// copy code in here ?
}
return *this
}
int length;
char* ptr;
};
如何实现“复制构造函数”和“赋值运算符”? (对不起 - 我是 C++ nube)
更新:sbi 和其他人问 - 为什么我要手动处理原始内存?我的答案很简单——在我参与的一个学生项目中,现在我们使用了很多 C 库,例如 OpenCV OpenAL 和 FFmpeg,还有更多。目前使用 C++,我们尝试创建一个基于图形的直接显示,如跨平台库,这将有助于实时视频广播和处理。我们的图形元素目前使用 char* 和 int 对进行数据交换。要将数据转换为订阅的元素,我们现在使用原始 memcpy。我想更进一步,让我们能够将我们的图形元素作为 C++ 模板的基础。因此,一个图形元素将能够与其他图形元素共享当前的图形元素数据,并且它共享的数据将是一种结构,其中不包含一个 char* 一个 int,而是包含任意数量的数据字段和几乎任何内部元素。所以这就是为什么我需要了解如何创建一个实现“复制构造函数”和“赋值运算符”的基本 C++ 结构,以便我能够为我们使用新的数据转换算法,如
void CastData(T item){
for(size_t i = 0 ; i < FuncVec.size(); i++){
T dataCopy = item;
FuncVec[i](dataCopy);
}
}
而不是当前使用的
void CastData(char * data, int length){
for(size_t i = 0 ; i < FuncVec.size(); i++){
char* dataCopy = new char[length];
memcpy(dataCopy, data, length);
FuncVec[i](dataCopy, length);
delete[] dataCopy;
}
}
【问题讨论】:
-
术语更正:有“拷贝构造函数”和“赋值运算符”。没有“复制操作员”。不过,这个名称并没有什么问题,只是没有使用它,可能是为了避免与复制构造函数混淆。
标签: c++ oop class copy operators