Chicago·Software Engineer·Technical Phone Screen
May 2026
C++ new-grad interview that was basically a two-part coding gauntlet: implement UniquePtr and SimpleVector from scratch, then field some pretty pointed follow-ups on move semantics and exception safety. The whole thing felt like they wanted to see if you actually understood RAII and ownership, not just whether you'd memorized the STL API.
- Implement a move-only smart pointer class template that owns a single heap-allocated object, supports get/release/reset/dereference/arrow operators, and correctly handles self-move-assignment without leaking or double-freeing.
- Implement a dynamic array class template with separate size and capacity tracking, using raw untyped storage so you never default-construct unused slots. Must support push_back, pop_back, reserve, clear, copy, and move operations.
- Explain the difference between copy semantics and move semantics, and point to specific places in your two implementations where each applies. Why is the smart pointer move-only while the vector supports both?
- Why does the standard vector require a noexcept move constructor on T to actually use moves during reallocation? What breaks with the strong exception guarantee if moves can throw?
- How would you add custom deleter support to your smart pointer without paying any runtime overhead for the common case where you just use the default delete?
- Which operations on your vector implementation invalidate iterators and references, and how does that compare to the behavior of std::vector?
“I got the basic structure down pretty fast but fumbled on the sequencing inside move assignment.” The rest of the author's notes on Software Engineer interview at Chicago, Technical Phone Screen round, covers how they worked through the question, what the panel pushed back on, and what they would do differently.
View Post