A memory leak is heap memory you allocated and never released, with no pointer left to release it. Nothing crashes right away, which is what makes leaks nasty. A long-running server just grows until the allocator or the OS kills it.
The classic shapes are a new with no matching delete, and an early return that skips the cleanup. A thrown exception does the same thing. So does overwriting a pointer that held the only handle to a block.
The fix in modern C++ is structural, not a matter of discipline. Store owned objects in unique_ptr, shared_ptr or a standard container. Their destructors run cleanup on every exit path, including the ones you forgot about.
For what still slips through, build with the address sanitizer or run a leak checker. Both name the allocation site, which is far more useful than the symptom.
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.
Why there's no diagram: “”
The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓
The diagram below the answer is the concept . Jump to it ↓