AZStd uses simple and fast allocator model, it does not follow the CStd. It is not templated on any type, thus is doesn't care about construction or destruction. We do require name support, in most cases should be just a pointer to a literal.
This is the specification for an AZSTD allocator: 
class allocator
{
public:
 
 typedef <impl defined>  pointer;
 
 typedef <impl defined>  size_type;
 
 typedef <impl defined>  difference_type;
 allocator(const char* name = "AZSTD Allocator");
 allocator(const allocator& rhs);
 allocator(const allocator& rhs, const char* name);
 allocator& operator=(const allocator& rhs;
 pointer      allocate(size_type byteSize, size_type alignment);
 void         deallocate(pointer ptr, size_type byteSize, size_type alignment);
 size_type    resize(pointer ptr, size_type newSize);
 const char* get_name() const;
 void        set_name(const char* name);
 
 size_type               max_size() const;
 <optional> size_type    get_allocated_size() const;
};
bool operator==(const allocator& a, const allocator& b);
bool operator!=(const allocator& a, const allocator& b);