我正在重构一些旧代码。有一个类似于 C 语言函数的函数,它的工作方式如下:(显然,这里进行了简化)
int LoadData(char** buf1, int* buf1Len, char** buf2, int* buf2Len) {
*buf1Len = DetermineLength1();
*buf1 = (char*)malloc(*buf1Len);
// Fill buf1
*buf2Len = DetermineLength2();
*buf2 = (char*)malloc(*buf2Len);
// Fill buf2
int result = 0; // Or some other INT depending of result
return result;
}
现在,我想将这个代码更新为返回unique_ptr或等效的内容,这样指针将由调用者自动管理,而调用者永远不会忘记释放内存。
我找不到一个好的解决方案,所以目前我已经将代码更改如下:
int LoadData(std::unique_ptr<char[]>* ubuf1, int* buf1Len, std::unique_ptr<char[]>* ubuf2, int* buf2Len) {
// same code as above, and finally:
ubuf1->reset(buf1);
ubuf2->reset(buf2);
return result;
}
这看起来不太好,所以我正在寻找更好的解决方案。由于我返回了两个缓冲区,使用 unique_ptr
作为返回值不是一个选项。
有没有更好的方法?
std::vector<char>
来代替buf1
和buf2
?通过引用传递给LoadData
,然后可以根据需要调用resize
。 - G.M.