您的位置:首页 > 编程语言 > C语言/C++

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

2015-10-16 11:07 369 查看
在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);
.....
}
如上代码要比不使用构造函数更加简洁和方便
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: