TRT
Sign in
mediumCorecoding

How would you build a leak-free Contact with history, photo, copy, and print?

Design a Contact that combines vector history, unique photo, safe copy and move, and a friend printer.

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

The Runtime Theory Team2 min read
Learn it firstProject: A Safe Contact Class With No LeaksPro — members onlyAssemble constructors, deep-copy control, smart pointers, friends, and namespaces into one Contact that owns safely and prints cleanly.

A strong answer

A strong candidate frames How would you build a leak-free Contact with history, photo, copy, and print? around the exact memory layout, compiler semantics, and hardware execution model covered in Project: A Safe Contact Class With No Leaks. Design a Contact that combines vector history, unique photo, safe copy and move, and a friend printer.

The module built Contact in layers: a guarded constructor, a deep-copying buffer, managed ownership, and controlled access. Real records need all four at once. A contact holds a name string, an age, a growing history of notes, and an optional photo. Users copy contacts for reports, move them into directories, and print cards at the desk. As shown in the trace above, copy duplicates history, move transfers the photo, and a friend renders the result.

A capstone integrates prior tools under one invariant. Here the invariant spans three members: name non-empty, age in range, history append-only through a validated operation, photo either absent or solely owned. No single prior lesson covers that span, which is why assembly errors cluster here: a correct copy for strings paired with a shallow photo alias, or a correct move for the photo paired with shared history.

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: Combine value members, smart pointers, and friends into one safe class.
  • Mastery of core invariant: Verify copy independence and leak-free destruction for a contact record.
  • Mastery of core invariant: Organize the result in a namespace with clear ownership roles.
  • 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. 01Why does the copy constructor clone the photo instead of copying the pointer?
  2. 02How does copy-and-swap keep assignment safe when allocation throws?

Not started

Sign in to save your learning progress.

Sign in to save