目前我公司的一个项目,全局new/delete超载了。
我测试了一些短代码,并重载了全局运算符 new。我看到当我使用STL(如向量等)时会调用重载的new,所以我想知道“new”会抑制stl分配器并且会出现效率下降吗?
所有分配器感知容器都使用
allocator_type
的实例进行动态内存管理。实际上,他们通过 std::allocator_traits
接口间接使用它,但这与解释无关。这意味着全局 operator new
/ operator delete
的重载不会直接影响 STL 容器,而是影响 std::allocator
,因为它使用全局 operator new
来实现 allocate()
和 allocate_at_least()
成员函数并使用全局 operator delete
来实现 deallocate()
成员函数。由于 STL 分配器感知容器使用 std::allocator
作为默认分配器,通过传递属性,全局 operator new
/ operator delete
的重载落在 STL 容器上。
如果您想避免这种情况,您只需实现一个自定义分配器并始终将其用作 STL 分配器感知容器的分配器。