分配器无国籍意味着什么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分配器无国籍意味着什么?相关的知识,希望对你有一定的参考价值。

分配器无国籍意味着什么?我意识到std :: allocator是malloc的包装器,并且没有自己的状态。同时,malloc也有自己的簿记,所以可以说所有std :: allocator实例都使用单个状态。

如何在没有状态的情况下实现池分配器?如果不是分配器,什么会保持当前的内存状态?

有人可以在这种情况下正式定义哪个州意味着什么?

答案

State表示类的实例中包含可变信息。无国籍意味着他们没有它。无状态类没有非静态数据成员。

通过使用对于该类型的所有池分配器相同的一些相互外部状态(池),可以使池分配器成为无状态。

另一答案

分配器对象本身不鼓励有状态。这意味着如果您创建std::allocator(或您自己的)实例,则此实例不应包含有关已分配块等的任何信息 - 此信息必须为static并在所有std::allocator实例中共享。违反此规则可能会导致STL库中的未定义行为。

例如,看看std::list::splice:它从一个std::list中移除元素的间隔并插入到其他中。真的没有用包含的元素(没有复制等) - 这个方法只是重新排列内部指针。那么,如果std::allocator实例#1(列表#1)知道什么,什么不知道std::allocator实例#2(列表#2)?这些元素将丢失,记忆,自发删除或其他任何内容。

关于STL这类事情的一个很好的解读是“有效STL”,Scott Meyers

以上是关于分配器无国籍意味着什么?的主要内容,如果未能解决你的问题,请参考以下文章

javascript 无国籍的Redux商店

javascript 无国籍的Redux

OAuth 2.0。没有会议? (无国籍)

要遵循哪些规则来实现可扩展性?

如何使用 Android 片段?

编辑片段中的列表视图对象