2011-02-09 10 views
0

可能性の重複:
What is this weird colon-member syntax in the constructor?C++のコンストラクタ定義でコロンの後にこの奇妙なことは何ですか?

私はこのコードが何を意味するか知っておく必要があります。

Cman::Cman() : 
m_pThread (NULL) //m_pThread is pointer to other class 
{ 
} 

私は本当にこのコードを理解していません。 NULLの意味は? 通常のコンストラクタとして使用できますか?

+1

とm_pThreadの初期化が初期化子リストで行われ、ためhttp://www.parashift.com/c++-faq-lite/ctors.html#faq-10.6を参照してください詳細情報 – Max

答えて

2
Cman::Cman() : m_pThread(NULL) { } 

のための完全な等価です:

Cman::Cman() { m_pThread = NULL; } 

NULL自体それは、コンストラクタ内のコードが実行される前に、NULLにm_pThreadを初期化すると言いnull pointer

+0

この場合ははいですが、より複雑な場合はそのオブジェクトではありません。 –

+0

@Mark Loeserあなたは例を挙げることができますか? – Andrey

+0

@Andrey:もちろん、初期化している変数がオブジェクト(文字列など)の場合、文字列はデフォルトで構築され、コンストラクタ内で代入演算子を使用することになりますデータと一緒に。 –

5

これはクラスCmanのデフォルトのコンストラクタです。 m_pThreadの値を初期化します。おそらくポインタであるクラスのプライベートメンバーはNULLに初期化されます。 NULLは、(テストすることができないランダムな値ではなく)有用なものを指していないときにポインタに割り当てられます。

3

これは、Cmanのデフォルトのコンストラクタであり、m_pThread(ポインタ)というメンバを値NULLで初期化します。この文脈におけるNULLは、なしを意味する。,またはは、基本的に無効なポインタ(何も指していない)である。

1

これは初期化リストを使用してm_pThreadを初期化し、その値をNULLに設定するCmanクラスの単純なコンストラクタです。ほとんどの場合、NULLはこのように定義されたマクロです

#define NULL 0 
or 
#define NULL 0L 

この初期化後、ポインタはアドレス0x000000を指します。

+0

ヌルポインタは必ずしもアドレス「0x00000000」を示すわけではありません。 – fredoverflow

+0

だから私は "ほとんどの場合"と書いた:) –

3
Cman::Cman() : m_pThread(NULL) { } 

:以降のものをイニシャライザリストといいます。これは、メンバー変数を初期化するために使用されます。したがって、構文m_pThread(NULL)m_pThreadNULLで初期化します。これを使用して、すべてのメンバー変数を初期化できます。

例は、

class Cman 
{ 
    Thread *m_pThread; 
    int Duration; 
    int MemorySize; 
    public: 
    Cman() : m_pThread(NULL), Duration(10000), MemorySize(9999) 
    { 
    } 
}; 

初期割り当て差があり、注意してください。

読むここではそれについて:Using Initialization Lists to Initialize Fields

関連する問題