c++ class member initialization without constructor
<p>Can someone explain me how the memory allocation and initialization in c++ works?    </p>

<pre><code>File Test.h
-----------
class Test
{
    public:
        Test();

        void clearSet();

    private:
        std::set&lt;std::string&gt; m_SetStringMember;
        int m_initMe;
}

File Test.cpp
-------------

Test::Test():m_initMe(0)
{}

Test::clearSet()
{
    m_SetStringMember.clear(); 
}
</code></pre>

<p>What I do understand is:<br/>
The <code>int</code> member <code>m_initMe</code> is correctly initialized in the constructor and therefore has a valid adress in memory and a valid value.<br/>
But what happens with the <code>m_SetStringMember</code>?<br/>
Does it has to have a valid adress in memory?<br/>
Does it has to have a valid default value? <br/>
Set by the default constructor of <code>std::set&lt;std::string&gt;()</code>? <br/>
Or do I have to explicitly set <code>m_SetStringMember = std::set&lt;std::string&gt;()</code> in the constructor?</p>
