std :: allocator中"destroy""析构函数""deallocate"之间的区别?

Zhe*_*ang 6 c++ std c++11

在C++中std::allocator,有三种与常见概念相关的方法:

  • deallocate
  • destroy
  • 析构函数

我想知道:

  1. 从内存管理的角度来看,它们彼此之间有何不同?
  2. 什么时候应该使用这个而不是那个?

谢谢!


编辑:更具体的疑虑:

我很抱歉首先概括一下,这里有一点我不明白.

  1. 析构函数有什么作用?文档没有讨论在调用析构函数时是否会自动释放内存
  2. destroy被用来调用对象的析构函数,什么是"对象"在这里的意思?

再次感谢你!

πάν*_*ῥεῖ 5

只是cppreference.com文档中的简短说明对我来说非常清楚

在此处输入图片说明

“ 1.析构函数做什么?文档没有讨论在调用析构函数时是否将自动释放内存”

std::allocator实例占用的所有内存将照常释放。

“ 2. destroy用于在对象上调用析构函数,这里的“对象”是什么意思?”

再次引用详细文档

 void destroy( pointer p ); // 1)
 template< class U >        // 2)
 void destroy( U* p );
Run Code Online (Sandbox Code Playgroud)

调用由p指向的对象的析构函数
1)调用((T*)p)->~T()
2)调用p->~U()

对象在此上下文中意味着类型的对象T由被管理std::allocator的实例。