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_unique
strcpy()
我试过:
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
这样就不需要new
和delete
。
不。
使用 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
。哎呀!
与往常一样,文档是您的朋友,您绝对应该这样对待它。