首页 > 解决方案 > 如何将 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';
    }

因为可能会导致内存泄漏,所以我想转换wargvunique_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,我尝试了矢量,但它不起作用。

标签: c++11unique-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";
  }
}

推荐阅读