小编Sha*_*nOH的帖子

从C++中的函数返回动态分配的缓冲区的最佳模式是什么?

我正在重构一些旧代码.有一个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;
}
Run Code Online (Sandbox Code Playgroud)

现在,我想更新此代码以某种方式返回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;
}
Run Code Online (Sandbox Code Playgroud)

这看起来不太好,所以我想看看是否有更好的解决方案.因为我正在返回两个缓冲区,所以使用unique_ptras作为返回值不是一个选项.

有没有更好的方法呢?

c++ design-patterns memory-management unique-ptr

4
推荐指数
1
解决办法
165
查看次数