In C++, when are global (namespace-scope, static-duration) objects destroyed?

Difficulty: Easy

Correct Answer: When the program terminates.

Explanation:


Introduction / Context:
Objects in C++ have lifetimes determined by their storage duration. Global objects (including namespace-scope statics) have static storage duration, meaning they exist for the entire run of the program. This question targets their destruction moment.


Given Data / Assumptions:

  • Objects are defined at namespace scope or as static-duration items.
  • Program startup initializes these objects before main begins (in a well-defined order per translation unit rules).
  • We examine when their destructors run.


Concept / Approach:
Static-duration objects are constructed before main() begins (after dynamic initialization) and are destroyed during program termination, after main() returns or std::exit is called, in the reverse order of construction within a translation unit. Destruction order across translation units follows implementation-defined rules but still occurs at program shutdown.


Step-by-Step Solution:
1) Identify an object with static storage: global T g; or static T s;2) Program starts → dynamic initialization occurs → objects become live.3) Program terminates normally → destructors for these objects are invoked.4) Order is reverse of construction for the same translation unit.


Verification / Alternative check:
Instrument constructors and destructors of global objects; you will observe construction before main() and destruction after main() ends.



Why Other Options Are Wrong:
Block/function exit: those apply to automatic storage, not static-duration objects.“As soon as local objects die” or “immediately after main() starts”: contradict static lifetime semantics.



Common Pitfalls:
Relying on a specific cross-translation-unit destruction order; use the “construct on first use” idiom or dependency-breaking techniques where order matters.



Final Answer:
When the program terminates.

More Questions from Constructors and Destructors

Discussion & Comments

No comments yet. Be the first to comment!
Join Discussion