先看一段代码,它是一个构造函数:
CANThread::CANThread()
{stopped = false;m_dev = INVALID_DEVICE_HANDLE;m_channel1 = INVALID_CHANNEL_HANDLE;m_channel2 = INVALID_CHANNEL_HANDLE;devPtr = nullptr;memset(&m_config,0,sizeof(m_config));
}
CANThread::CANThread()
这段代码表示的是 CANThread
类的构造函数。在C++中,构造函数是一种特殊的成员函数,用于在创建类的对象时初始化对象。
构造函数何时执行:
-
创建对象时:当你使用类来创建一个新对象时,构造函数会自动执行。例如:
CANThread myCanThread; // 这里会自动调用 CANThread::CANThread() 构造函数
-
在堆上分配内存时:如果你使用
new
操作符在堆上分配一个对象,构造函数会被调用:CANThread* myCanThread = new CANThread(); // 使用 new 分配对象并调用构造函数
-
返回对象时:如果一个函数返回类的对象,构造函数会在返回时被调用,以初始化返回的对象:
CANThread createCANThread() {return CANThread(); // 构造函数在返回时调用 }
-
参数传递时:如果一个函数通过值接收一个对象,构造函数会在参数传递时被调用:
void process(CANThread thread) { /* ... */ } process(CANThread()); // 构造函数在传递给 process 时调用
构造函数的作用:
在 CANThread::CANThread()
中,你初始化了 CANThread
对象的几个成员变量:
stopped
被初始化为false
,可能用于控制线程是否应该停止。m_dev
、m_channel1
和m_channel2
被初始化为INVALID_DEVICE_HANDLE
和INVALID_CHANNEL_HANDLE
,这些可能是预定义的无效句柄值,用于表示设备或通道句柄未初始化。devPtr
被初始化为nullptr
,表示它不指向任何内存。m_config
通过memset
函数被初始化为0,这通常用于清零结构体或类的对象。
构造函数是类的实例化过程中非常重要的一部分,它确保了每当创建类的新实例时,所有的成员变量都被正确地初始化。