gpt4 book ai didi

c++ - 为什么 unique_ptr 不能从 T* 构造?

转载 作者:行者123 更新时间:2023-12-03 11:14:58 35 4
gpt4 key购买 nike

对于一个头脑简单的例子,这段代码有什么“错误”?

unique_ptr<char> meow = strdup("meow");
我是否向 unique_ptr 提供“删除器”参数模板,一个 unique_ptr<T>无法从 T* 分配.
为什么不 <memory>提供这个看似直观的捷径?这仅仅是一个疏忽,还是出于某种原因,这种可分配性从根本上来说是一个坏主意?

最佳答案

Why wouldn't <memory> offer this seemingly intuitive shortcut?


想象一下你有
int bar;
{
int * foo = &bar;
std::unique_ptr<int> uptr = foo;
// use uptr
}
uptr超出范围,它将尝试执行 delete pointer; ,它将尝试调用 deletenew 未分配的内存上.这是未定义的行为,可能会导致各种问题。标准不允许编写这样的错误代码,而不是允许编写这样的错误代码。
如果您确实确定要构建 unique_ptr从现有指针中,您知道默认删除器是您想要的,那么您可以使用以下形式
auto pointer_name = std::unique_ptr<type>(pointer_i_know_needs_to_be_deleted);

关于c++ - 为什么 unique_ptr<T> 不能从 T* 构造?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66372500/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com