1. 程式人生 > >c++如何用好struct的建構函式

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);
    .....
}
如上程式碼要比不使用建構函式更加簡潔和方便