在C ++构造函数定义中冒号之后有什么奇怪的东西?

时间:2011-02-09 20:04:15

标签: c++ constructor

  

可能重复:
  What is this weird colon-member syntax in the constructor?

我需要知道这段代码的含义:

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

我真的不明白这段代码。 这个NULL是什么意思? 我可以将它用作常规构造函数吗?

6 个答案:

答案 0 :(得分:5)

它表示在执行构造函数内的代码之前将m_pThread初始化为NULL。

答案 1 :(得分:5)

这是类Cman的默认构造函数。它会将m_pThread的值(可能是作为指针的类的私有成员)初始化为NULL。当{1}}没有指向任何有用的东西时(而不是你无法测试的随机值),它被分配给指针。

答案 2 :(得分:3)

这是类Cman的默认构造函数,它初始化一个名为m_pThread的成员(它是一个指针),值为NULL。此上下文中的NULL表示 nothing empty 0 ,从根本上说它是无效指针(指向任何内容)。

答案 3 :(得分:3)

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

:之后的事情称为初始化列表。它用于初始化成员变量。因此语法m_pThread(NULL)使用m_pThread初始化NULL。您可以使用它来初始化所有成员变量。

实施例,

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

请记住,初始化分配之间存在差异。

在此处阅读:Using Initialization Lists to Initialize Fields

答案 4 :(得分:2)

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

完全等同于:

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

NULL本身就是null pointer

答案 5 :(得分:1)

这是Cman类的简单构造函数,它使用初始化列表初始化m_pThread并将其值设置为NULL。在大多数情况下,NULL是以这种方式定义的宏

#define NULL 0
or
#define NULL 0L

初始化后,指针指向地址0x000000。