title: C++: Do static primitives become invalid at program exit?
body: <p>Assume I have a function like this:</p>
  
  <pre><code>MyClass &amp;MyFunction(void)
  {
    static MyClass *ptr = 0;
    if (ptr == 0)
      ptr = new MyClass;
    return MyClass;
  }
  </code></pre>
  
  <p>The question is at program exit time, will the ptr variable ever become invalid (i.e. the contents of that ptr are cleaned up by the exiting process)? I realize that this function leaks, but it is only an example for simplicity.</p>
  
  <p>The same question also applies to other primitives besides pointers as well. How about if I have a static integer, does the value of that integer always persist throughout exit or is variable due to static destruction order issues?</p>
  
  <p>EDIT:</p>
  
  <p>Just to clarify, I want to know what actually happens to the contents of the static pointer (or any other primitive type like an int or a float) and not to the memory it is pointing to. For instance, imagine that the ptr points to some memory address which I want to check in the destructor of some other static class. Can I rely on the fact that the contents of the ptr won't be changed (i.e. that the pointer value won't be cleaned up during the static destruction process)?</p>
  
  <p>Thanks,
  Joe</p>