使用 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);
我正在尝试将遗留 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);