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

Copying from raw pointer to smart pointer using memcpy

我正在尝试将遗留 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* 类型的原始指针。 有什么建议么??非常感谢!

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

cache.get();

因此,您的 memcpy 看起来像

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