【发布时间】:2021-02-25 16:28:05
【问题描述】:
这个代码有什么“错误”,举个简单的例子?
unique_ptr<char> meow = strdup("meow");
无论我是否为unique_ptr 模板提供“删除器”参数,都无法从T* 分配unique_ptr<T>。
<memory> 为什么不提供这个看似直观的快捷方式?这仅仅是一种疏忽,还是出于某种原因,这种可分配性从根本上来说是个坏主意?
【问题讨论】:
-
应该是:
std::unique_ptr<char[]> meow{strdup("meow")}; -
这能回答你的问题吗? unique_ptr operator=
-
“为什么
不提供这个看似直观的快捷方式?” - 正是如此。它简单直观,无需了解所有权影响即可轻松(ab)使用。谁不喜欢摸索一个 MLOC 代码库来发现=的潜在错误用法?甚至auto_ptr也从未提供过。 -
请注意,即使
meow = strdup()可以工作,您也必须使用调用free()的自定义删除器,而不是调用delete。
标签: c++ unique-ptr