c++如何用好struct的构造函数

    在c与c++中都存在struct类型,用以表示一段数据结构,其中在c++中struct与class几乎完全相同,都存在类内函数已经构造析构函数,因此我们可以在实际开发工作中通过构造函数以及析构函数来对数据进行初始化以及去初始化。

1.如我们要在某个链表尾部,插入某个结构体数据,一般的代码都是如下实现:

m_ptail->next=Ele;
Ele->next=m_ptail;
m_ptail=Ele;
Ele->next=NULL;
我们需要在最后依然要对Ele->next进行赋值为NULL,现在如果我们实现了构造函数的话,如下面的结构体:

typedef struct log
{
    logLevel level;
    char* content;
    log*  next;
    char aliasName[_LOG_ALIAS_NAME_LEN/4];
    log()
    {
        level=INFO;
        content=NULL;
        next=NULL;
        memset(aliasName,0,_LOG_ALIAS_NAME_LEN/4);
    }
    ~log()
    {
        level=INFO;
        content=NULL;
        next=NULL;
        memset(aliasName,0,_LOG_ALIAS_NAME_LEN/4); 
    }
    
}log;

分配内存时调用new进行分配会自动调用构造函数,同时会将结构体中的相关变量进行初始化,这样的话结构体中的next就变成了NULL,此举可以有效降低代码编写复杂,以及因为变量赋值遗忘造成的bug.

2.在linux编程中,我们有可能会遇到枷锁的情况,加锁的代码类似如下:

pthread_mutex_lock(m_mutex);
....
pthread_mutex_unlock(m_mutex);
而如果使用构造函数和析构函数的话,假如结构体是如下实现的

struct 
{
   pthread_mutex_t* m_mutex;  
   CMutexLock(pthread_mutex_t* pMutex):m_mutex(pMutex){
        pthread_mutex_lock(m_mutex);
    }
   ~CMutexLock(){
        pthread_mutex_unlock(m_mutex);
        m_mutex=NULL;
    }
};
我们代码ing的实现就可以这样了:

{
    CMutexLock lock(&m_mutex);
    .....
}
如上代码要比不使用构造函数更加简洁和方便

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值