C++ 使用智能指针和std::vector设置字符数组

C++ 使用智能指针和std::vector设置字符数组,c++,char,c++17,smart-pointers,C++,Char,C++17,Smart Pointers,我想要一个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)}; } 我得到了错误 candidate function not viabl

我想要一个
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)};

 } 
我得到了错误

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);
候选函数不可行:没有已知的从“const char*”到
“const std::uuu 1::uuu vector_base::value_type”(又名
第一个参数的“const std::_1::unique_ptr”)
_LIBCPP_INLINE_VISIBILITY void push_back(常量参考x);
我正在使用C++17标准的
clang

我想要一个char[maxname]数组

数组的数组称为二维数组

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

在C++中,你一般会删除char []和数组。通常,您需要使用std::vector,对于string,则使用std::string。Vector会自动增长和收缩,并为您进行内存管理。string也有同样的功能,但专门用于字符串管理

因此,您的代码如下所示:

std::vector<std::string> names;
然后您可以轻松检索您的姓名:

std::string &name0 = names[0];
或char*等效值(仅适用于C互操作性):


我想知道你真正想要的是不是
std::unique\u ptr names\uu
unique\u ptr
仅适用于使用
new
分配的指针。试图在文本字符串上使用它是行不通的。但是请发布真实的代码。由于许多不同的原因,您发布的代码无法编译。恕我直言,这些代码都没有多大意义。你最终想要实现什么?无论你的目标是什么,这段代码都不太可能让你更接近它。
std::vector
在释放内存的意义上已经很聪明了。只是
std::vector
,或者实际上,这就是
std::string
names.push_back("ABC");
std::string &name0 = names[0];
const char *c_string = name0.c_str();