c++11 - 如何将 char ** 转换为 unique_ptr 数组?
问题描述
旧代码如下:
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
,我尝试了矢量,但它不起作用。
解决方案
正如@Some程序员花花公子评论的那样,std::vector<std::string>
应该是比std::unique_ptr<>
内存分配管理更好的选择。
我试着写一个简单的例子,效果很好。
#include <iostream>
#include <string>
#include <vector>
int main(int argc, char** argv) {
std::vector<std::string> collection(argc);
for (auto i = 0; i < argc; i++) {
collection[i] = argv[i];
}
for (const auto& arg : collection) {
std::cout << arg << "\n";
}
}
推荐阅读
- python - 在烧瓶 appbuilder 中获取当前语言
- c# - EntityFramework - 在 LINQ 查询中按无序对分组
- php - 调用未定义的函数 App\Http\Controllers\curl_init() laravel 5.6
- c# - Retrieve image from database and set it to background-image property css in asp.net mvc5
- node.js - GraphQL / Apollo: "No Schemas available". NodeJS
- java - 如何在 Springboot JPA 中返回自定义 json 作为输出?
- bash - 当我在 mac 机器 OS high sierra 的终端中发出任何命令时出现“没有这样的文件或目录”错误
- javascript - javascript按距离对位置的json进行排序
- json - 解码数组时无法将数组解组为 Go 结构
- woocommerce - 存档产品页面不起作用