我正在尝试转换旧版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 *类型的原始指针。
有什么建议么??非常感谢!
答案 0 :(得分:7)
您的实现是正确的,但是您不必调用reset
来清理内存。 std::unique_ptr
类将自动处理它,并且要访问唯一的指针存储器,我们可以仅使用get
方法,如下所示:
cache.get();
因此,您的memcpy
看起来像
memcpy(cache.get(), matrix, sizeof(MATRIX)*numRow*numCol);