举个简单的例子,这段代码有什么“问题”?
unique_ptr<char> meow = strdup("meow");
我是否向unique_ptr
模板,一个unique_ptr<T>
不能从分配T*
.
为什么不呢<memory>
提供这个看似直观的快捷方式吗?这只是一个疏忽,还是出于某种原因,这种可分配性从根本上来说是一个坏主意?
为什么不呢<memory>
提供这个看似直观的快捷方式吗?
想象一下你有
int bar;
{
int * foo = &bar;
std::unique_ptr<int> uptr = foo;
// use uptr
}
When uptr
超出范围,它将尝试做delete pointer;
,它将尝试调用delete
在未分配的内存上new
。这是未定义的行为,可能会导致各种问题。该标准不允许编写这样的有缺陷的代码,而是不允许这样做。
如果您确实确定要构建一个unique_ptr
从现有的指针,并且您知道默认删除器是您想要的,那么您可以使用以下形式
auto pointer_name = std::unique_ptr<type>(pointer_i_know_needs_to_be_deleted);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)