【发布时间】:2021-11-16 14:04:03
【问题描述】:
旧代码如下:
char** wargv = new char*[argc];//memory leak!
for(int k = 0; k < argc; ++k)
{
wargv[k] = new char[strlen(argv[k]) + 1];
strncpy(wargv[k], argv[k], strlen(argv[k]));
wargv[k][strlen(argv[k])] = '\0';
}
因为可能会导致内存泄漏,所以我想将wargv 转换为unique_ptr。怎么做?
我知道如何将char* 转换为unique_ptr,下面的代码有效:
int size_t = 10;
std::unique_ptr<char[]> wargv(new char[size_t]{0});
strncpy(wargv.get(), "abcdef", size_t);
但我不知道如何将char ** 转换为unique_ptr,我尝试了vector,但它不起作用。
【问题讨论】:
-
改用
std::vector<std::string>不是更好吗? -
见这里 - stackoverflow.com/questions/31135178/… -
using array_ptr_type = std::unique_ptr<char[]>; using array_of_arrays_type = std::unique_ptr<array_ptr_type[]>; -
我不想手动释放内存,
wargv会传入另一个函数。 -
您不应使用
size_t作为变量名。它是标准类型名称。此外,我建议考虑@Someprogrammerdude 的建议。 -
如果要将结果传递给需要
char*参数的函数,则对两个“维度”使用智能指针将无法解决问题。尽可能使用标准 C++ 容器和字符串,然后仅在真正需要时才显式转换为预期值。使用(临时)char**变量。然后明确地释放一切。
标签: c++11 unique-ptr