将 char 数组转换为 strcpy 的 C++11 unique_ptr

Ion*_*316 -2 c++ unique-ptr c++11 visual-studio-2013

目前我有 C++ 代码(我使用的是 Visual Studio 2013):

char * dest= new char[srcLen + 1] {};
strcpy(dest, source);
std::string s(dest);
delete dest;
Run Code Online (Sandbox Code Playgroud)

如何将其转换为 C++11以便可以unique_ptr使用?make_uniquestrcpy()

我试过:

auto dest = make_unique<char>(srcLen + 1);
strcpy(dest, source);
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下编译strcpy错误

Error   1   error C2664: 'char *strcpy(char *,const char *)' : cannot convert argument 1 from 'std::unique_ptr<char,std::default_delete<char>>' to 'char *'
Run Code Online (Sandbox Code Playgroud)

更新我确实使用了std::string. 我已经更新了我的代码片段以使其更加清晰。基本上,源 char * 数组可能会也可能不会以 null 结尾。临时dest缓冲区确保字符串以空字符结尾。我确实想将其转换为std::string. 我之前的作品有效。我只是想知道是否有一种方法可以使用创建临时缓冲区,make_unique这样就不需要newdelete

Lig*_*ica 6

不。

使用 a std::string,该类型设计用于包装动态分配的char数组。

std::unique_ptr更一般地,您可以使用成员函数访问 a 的底层指针T* std::unique_ptr<T>::get() const

strcpy(dest.get(), source);
Run Code Online (Sandbox Code Playgroud)

另外,您还有一个错误,您现在所做的dest就是创建一个char具有初始值的动态分配的srcLen。哎呀!

与往常一样,文档是您的朋友,您绝对应该这样对待它。