In reading this chapter, you'll have to keep in mind the difference between two fundamental concepts, which I am going to call memory resource and allocator. A memory resource (a name inspired by the standard's own terminology--you might find it more natural to call it "a heap") is a long-lived object that can dole out chunks of memory on request (usually by carving them out of a big block of memory that is owned by the memory resource itself). Memory resources have classically object-oriented semantics (see Chapter 1, Classical Polymorphism and Generic Programming): you create a memory resource once and never move or copy it, and equality for memory resources is generally defined by object identity. On the other hand, an allocator is a short-lived handle pointing to a memory resource. Allocators have pointer semantics...





















































