TRT
Sign in
easyFoundationsconcept

When does an object belong on the heap instead of the stack?

Explain heap lifetime, matching delete forms, leaks from lost pointers, and owner types.

TRT practice prompt — not a verified question from a named employer.

The Runtime Theory Team2 min read
Learn it firstThe Heap: new, delete and Memory LeaksLearn where objects can live beyond a function call, how new and delete work with the allocator, and how leaks and mismatched deletes arise, so that you see why modern C++ lets containers and smart pointers do the work.

A strong answer

A strong candidate frames When does an object belong on the heap instead of the stack? around the exact memory layout, compiler semantics, and hardware execution model covered in The Heap: new, delete and Memory Leaks. Explain heap lifetime, matching delete forms, leaks from lost pointers, and owner types.

A local variable lives in its function's frame and is gone when the function returns, as lesson 6 of module 2 showed. That is perfect for most variables, but three situations need something else. An object may have to outlive the function that creates it. An array may have a size that is known only when the program runs. And some data is too large for a stack of a few megabytes.

All three need storage whose lifetime you control yourself. C++ provides it in a region of memory called the heap, also called the free store.

In a production interview, always connect the specification rule to its concrete runtime consequence: state what lives on the stack versus the heap or static storage segment, how the compiler or operating system validates alignments, lifetimes, and error codes, and what happens under adversarial or boundary inputs (such as zero-length buffers, integer overflow, concurrent mutation, or partial I/O). Backing your explanation with a small trace of register/memory state transitions immediately separates senior systems engineers from candidates who only memorized syntax.

What the interviewer is listening for

  • Mastery of core invariant: Explain when to use the heap instead of the stack.
  • Mastery of core invariant: Match new with delete and new[] with delete[].
  • Mastery of core invariant: Recognize a memory leak, including one caused by overwriting the only pointer.
  • Hardware and ABI awareness: Explaining how sizes, alignments, calling conventions, or kernel boundaries behave on real 64-bit targets rather than relying on implementation-defined assumptions.
  • Defensive engineering: Naming the exact compiler flags (-Wall -Wextra -Werror), static analyzers, or runtime sanitizers (-fsanitize=address,undefined,thread) that verify correctness in CI.

Common mistakes

  • Explaining only surface syntax without tracing the underlying memory addresses, ownership lifetime, or kernel/user-space state transitions.
  • Assuming undefined behavior (such as signed overflow, uninitialized reads, strict-aliasing violations, or dangling pointers) will "just work" because it passed an unoptimized -O0 debug build.
  • Ignoring return codes, partial reads/writes, alignment padding, or cleanup paths when an allocation or syscall fails midway through a function.

This answer walks

Practice follow-ups

  1. 01What goes wrong when array new is paired with scalar delete?

Not started

Sign in to save your learning progress.

Sign in to save