在下面的函数(从另一个Stackoverflow帖子中修改)中,我试图使用unique_ptr
,以便稍后释放由new
分配的内存。
在这里做std::wstring(res.get())
是否安全?也就是说,在调用字符串构造函数时是否会复制res
,以便如果释放由new
分配的内存,返回的值不会成为垃圾?
std::wstring narrow_to_wide_str(const std::string& input) {
size_t size = input.size() + 1;
size_t out_size;
std::unique_ptr<wchar_t[]> res{ new wchar_t[size] };
mbstowcs_s(&out_size, res.get(), size, input.c_str(), size - 1);
return std::wstring(res.get());
}
答案 0 :(得分:4)
在这里进行
std::wstring(res.get())
安全吗?
是的
来自std::basic_string::basic_string:
basic_string(const CharT * s, const Allocator&alloc = Allocator()); (5)
5)构造内容为并由s 指向的以空终止的字符串的副本初始化的字符串。字符串的长度由第一个空字符确定。如果[s,s + Traits :: length(s))不是有效范围(例如,如果s是空指针),则该行为是不确定的。如果要推导的Allocator类型不符合分配器的条件,则此构造函数不用于类模板参数推导。 (自C ++ 17起)
(强调我的。)
答案 1 :(得分:4)
是的,这很安全,但是您无需在此处使用指向$("#mapContainer").on("click", ".btnCircleDraw",function(){
var circleDrawer = new L.Draw.Circle(map, {
shapeOptions: {
color: (must call the color here)
}
});
circleDrawer.enable();
});
的指针:
wchar_t[]