2

c++ でのメモリの割り当てと初期化がどのように機能するか説明してもらえますか?

File Test.h
-----------
class Test
{
    public:
        Test();

        void clearSet();

    private:
        std::set<std::string> m_SetStringMember;
        int m_initMe;
}

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

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

Test::clearSet()
{
    m_SetStringMember.clear(); 
}

私が理解していることは次
のとおりです。intメンバーm_initMeはコンストラクターで正しく初期化されているため、メモリ内に有効なアドレスと有効な値があります。
しかし、どうなりm_SetStringMemberますか?
メモリ内に有効なアドレスが必要ですか?
有効なデフォルト値が必要ですか? ?
のデフォルト コンストラクターによって設定されます。または、コンストラクターで 明示的に設定する必要がありますか?std::set<std::string>()
m_SetStringMember = std::set<std::string>()

4

3 に答える 3

4

しかし、m_SetStringMember ではどうなるでしょうか? メモリ内に有効なアドレスが必要ですか?

はい。ただし、アドレスはコンストラクターとは関係ありません。コンストラクターは、コンパイラーまたはヒープ アロケーターによって有効なアドレスが指定された場合にのみ、オブジェクトを初期化します。

有効なデフォルト値が必要ですか?

はい

std::set() のデフォルト コンストラクターによって設定されますか?

はい

または、コンストラクターで m_SetStringMember = std::set() を明示的に設定する必要がありますか?

明示的にしたい場合は、これを行います

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

しかし、デフォルトでも同じことが起こります。

于 2013-05-02T09:15:13.207 に答える
1

m_SetStringMemberstd::set独自のコンストラクタを持つクラスのオブジェクトです。コンストラクターによって正しく初期化されます。

于 2013-05-02T09:14:21.357 に答える