gpt4 book ai didi

c++ - STL 容器库 - 在分配器类的不同实例上调用分配/解除分配是否合法?

转载 作者:太空狗 更新时间:2023-10-29 20:30:34 27 4
gpt4 key购买 nike

首先,我认为不是。但是,我在 Debug模式下观察到 MSVC 10.0 的这种行为。我正在使用自定义 allocator 类,它依赖于用户仅将分配在同一实例上的指针传递给 deallocate。但是,在 Release模式下,我的代码可以正常工作。

这是错误还是我弄错了?

最佳答案

该标准要求任何分配器都能够释放由同一类型的任何其他分配器生成的内存,即使它是一个完全不同的实例。这是让 list::splice 正常工作所必需的。它在很大程度上被认为是 C++ 规范中的设计缺陷,在 C++0x 中,他们引入了一组对分配器的修正来解决这个问题。同时,您在 STL 容器中使用的任何分配器都不能有自己的本地状态。

编辑:对于那些想要原始语言的人,这里是 C++ ISO 规范的 §20.1.5/4:

Implementations of containers described in this International Standard are permitted to assume that their Allocator template parameter meets the following two additional requirements beyond those in Table 32.

— All instances of a given allocator type are required to be interchangeable and always compare equal to each other.

在 C++0x 标准的最新 ISO 草案中,此要求不再存在。默认的 std::allocator 仍将根据需要保持此不变性,但看起来您将来不必以这种方式约束自己。

关于c++ - STL 容器库 - 在分配器类的不同实例上调用分配/解除分配是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6805417/

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