在C++17中不推荐使用rebind<U>::other
,而在C++20中将其删除的原因主要是为了简化和统一内存管理的方式。
首先,rebind<U>::other
是一个在标准库中定义的用于重新绑定分配器的类型。它的作用是创建一个新的分配器类型,该类型与给定类型不同,但具有相同的分配行为。通过使用rebind<U>::other
,可以在编译时生成适应不同类型的分配器。
然而,在实践中,rebind<U>::other
的使用并不常见,并且容易导致混淆和错误。它引入了额外的复杂性,并且在代码中很难跟踪和理解。此外,C++17中引入了更简洁和易于使用的分配器编程接口,例如allocate
和deallocate
成员函数,使得使用rebind<U>::other
变得不再必要。
为了提高代码的可读性和维护性,C++20标准决定删除rebind<U>::other
。这样可以减少标准库的复杂性,并将注意力集中在更常用和更简单的分配器接口上。
在C++17及以后的版本中,推荐使用std::allocator_traits
和std::allocator
来管理内存分配。std::allocator_traits
提供了一组标准化的接口,用于操作和查询分配器的属性和行为。而std::allocator
是C++标准库中默认的分配器类型,它使用全局operator new
和operator delete
函数进行内存分配和释放。
总之,C++17不推荐使用rebind<U>::other
是为了简化和统一内存管理的方式。C++20中将其删除,进一步推动使用std::allocator_traits
和std::allocator
来管理内存分配。
领取专属 10元无门槛券
手把手带您无忧上云