C++允许 allocator::deallocate(NULL,1) 吗?

发布于 2024-09-07 06:49:51 字数 137 浏览 11 评论 0原文

free(NULL)::operator delete(NULL) 都是允许的。分配器概念(例如 std::allocator 是否也允许deallocate(NULL,1),或者是否需要自己设置保护?

Both free(NULL) and ::operator delete(NULL) are allowed. Does the allocator concept (e.g. std::allocator also allow deallocate(NULL,1), or is it required to put your own guard around it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

留蓝 2024-09-14 06:49:51

您需要添加自己的支票。

根据§20.4。 1.1/8,解除分配需要:

p 是从 allocate() 获得的指针值。 n 应等于作为传递的值
调用 allocate 的第一个参数返回 p。

当无法提供存储时,allocate 会引发异常 (§20.4.1.1/7)。换句话说,allocate 永远不会返回 0,因此 deallocate 永远不会得到 0。传递 0 会导致未定义的行为。

You'll need to add your own check.

According to §20.4.​1.1/8, deallocate requires:

p shall be a pointer value obtained from allocate(). n shall equal the value passed as the
first argument to the invocation of allocate which returned p.

allocate throws an exception when storage can't be given (§20.4.​1.1/7). In other words, allocate never returns 0, and therefore deallocate should never get a 0. Passing a 0 would lead to undefined behavior.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文