【发布时间】:2015-04-26 22:45:35
【问题描述】:
我有一个函数 f 返回一个 char*。功能文档说:
The user must delete returned string
我想从中构造一个std::string。琐碎的事情是:
char* cstring = f();
std::string s(cstring);
delete cstring;
是否可以使用 C++ 功能做得更好?我想写一些类似的东西
std::string(cstring)
避免泄漏。
【问题讨论】:
-
你可以将
f()的结果放入unique_ptr,然后用它来初始化字符串。您仍然需要两行代码。你应该向写f()的人投诉。 -
并抽象出转换。
-
@juanchopanza:为什么是两行代码?
std::string(std::unique_ptr<char[]>(f()).get())怎么了? -
@BenVoigt Ha!是的,当然,那会很好(尽管有些人可能会反对发生了太多事情。)
-
@juanchopanza:当然,在语句块中,分成多个更简单的步骤是有意义的。但是单线在没有阻塞的情况下非常方便,例如初始化器和单个表达式 lambdas。
标签: c++ string c++11 move-semantics