c++构造函数在什么时间会被调用执行

先看一段代码,它是一个构造函数:

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++中,构造函数是一种特殊的成员函数,用于在创建类的对象时初始化对象。

构造函数何时执行:

  1. 创建对象时:当你使用类来创建一个新对象时,构造函数会自动执行。例如:

    CANThread myCanThread; // 这里会自动调用 CANThread::CANThread() 构造函数
    
  2. 在堆上分配内存时:如果你使用 new 操作符在堆上分配一个对象,构造函数会被调用:

    CANThread* myCanThread = new CANThread(); // 使用 new 分配对象并调用构造函数
    
  3. 返回对象时:如果一个函数返回类的对象,构造函数会在返回时被调用,以初始化返回的对象:

    CANThread createCANThread() {
        return CANThread(); // 构造函数在返回时调用
    }
    
  4. 参数传递时:如果一个函数通过值接收一个对象,构造函数会在参数传递时被调用:

    void process(CANThread thread) { /* ... */ }
    process(CANThread()); // 构造函数在传递给 process 时调用
    

构造函数的作用:

CANThread::CANThread() 中,你初始化了 CANThread 对象的几个成员变量:

  • stopped 被初始化为 false,可能用于控制线程是否应该停止。
  • m_devm_channel1m_channel2 被初始化为 INVALID_DEVICE_HANDLEINVALID_CHANNEL_HANDLE,这些可能是预定义的无效句柄值,用于表示设备或通道句柄未初始化。
  • devPtr 被初始化为 nullptr,表示它不指向任何内存。
  • m_config 通过 memset 函数被初始化为0,这通常用于清零结构体或类的对象。

构造函数是类的实例化过程中非常重要的一部分,它确保了每当创建类的新实例时,所有的成员变量都被正确地初始化。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值