使用memcpy从原始指针复制到智能指针

时间:2019-06-06 08:02:32

标签: c++ smart-pointers

我正在尝试转换旧版C代码以使用智能指针。并遇到了以下内容(只是片段,让我开始学习):

MATRIX* cache;
---
cache = new MATRIX[numRow*numCol];
if (cache == NULL) 
{
    return FAIL;
}
---
memset(cache, 0, sizeof(MATRIX)*numRow*numCol);
---
memcpy(cache, matrix, sizeof(MATRIX)*numRow*numCol);

我试图将它们转换成这样:

std::unique_ptr<MATRIX[]> cache;
---
cache = std::make_unique<MATRIX[]>(numRow*numCol);
if (cache == NULL) 
{
    return FAIL;
}
---
cache.reset();

这是正确的吗?还有更好的写法吗?另外,我不确定如何做

memcpy C ++对应版本
memcpy(cache, matrix, sizeof(MATRIX)*numRow*numCol);

matrix只是MATRIX *类型的原始指针。 有什么建议么??非常感谢!

1 个答案:

答案 0 :(得分:7)

您的实现是正确的,但是您不必调用reset来清理内存。 std::unique_ptr类将自动处理它,并且要访问唯一的指针存储器,我们可以仅使用get方法,如下所示:

cache.get();

因此,您的memcpy看起来像

memcpy(cache.get(), matrix, sizeof(MATRIX)*numRow*numCol);