使用智能指针和 std::vector 设置一个 char 数组

Setting up an array of char using smart pointer and std::vector

我想要一个 char[maxname] 的数组。我最初的方法如下

 class char_list
 {
  char_list(int noc){names_.reserve(noc)}
  std::vector<std::unique_ptr<char>> names_;
  void setname( const char* name){ names_.push_back(name)};

 } 

当我尝试通过例如

调用例程时
char aux[100];
aux = 'asadsdsd'  
const char* aux1 = aux;
setname(aux1);

我收到错误

candidate function not viable: no known conversion from 'const char *' to
  'const std::__1::__vector_base<std::__1::unique_ptr<char, std::__1::default_delete<char> >, std::__1::allocator<std::__1::unique_ptr<char, std::__1::default_delete<char> > > >::value_type' (aka
  'const std::__1::unique_ptr<char, std::__1::default_delete<char> >') for 1st argument
_LIBCPP_INLINE_VISIBILITY void push_back(const_reference __x);

我正在使用 clang 与 C++17 标准。

I want to have an array of char[maxname]

数组的数组称为二维数组。

constexpr unsigned N = 10;  // 10 as an example.
char arr[N][maxname];

在 C++ 中,您通常应该放弃 char[] 和数组。通常您应该使用 std::vector,如果是字符串,则使用 std::string。 Vector 自动增长和收缩,并为您进行内存管理。 std::string 功能相同,但专用于字符串管理。

所以你的代码应该是这样的:

std::vector<std::string> names;

然后你可以做一些很棒的事情,比如:

names.push_back("ABC");

然后您就可以轻松取回您的名字了:

std::string &name0 = names[0];

或等效的 char*(仅用于 C 互操作性):

const char *c_string = name0.c_str();