c++如何用好struct的构造函数
2015-10-16 11:07
369 查看
在c与c++中都存在struct类型,用以表示一段数据结构,其中在c++中struct与class几乎完全相同,都存在类内函数已经构造析构函数,因此我们可以在实际开发工作中通过构造函数以及析构函数来对数据进行初始化以及去初始化。
1.如我们要在某个链表尾部,插入某个结构体数据,一般的代码都是如下实现:
分配内存时调用new进行分配会自动调用构造函数,同时会将结构体中的相关变量进行初始化,这样的话结构体中的next就变成了NULL,此举可以有效降低代码编写复杂,以及因为变量赋值遗忘造成的bug.
2.在linux编程中,我们有可能会遇到枷锁的情况,加锁的代码类似如下:
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); ..... }如上代码要比不使用构造函数更加简洁和方便
相关文章推荐
- 乘法口诀表的输出(初)
- C语言程序创建文件夹
- C语言程序创建文件
- 剑指offer第十三题【调整数组顺序使奇数位于偶数前面】c++实现
- C++对象池完整实现
- 雪*C语言核心知识总结四
- [BFS] Zjut CPP 1907 破解迷宫
- C语言数组
- CString转double
- Effective modern C++ 条款 38:如果异步至关重要请指定std::launch::async
- Debug Assertion Failed! FILE viewform.cpp , line 69
- C++访问控制符private/protected/public
- VC++ 6.0 C8051F340 MFC programming note
- C++项目二(2):摄氏度的转换
- C++项目中的extern "C" {}
- C语言变长数组data[0]的用法
- C语言项目二:电阻并联
- C语言字节对齐问题详解(zz)
- C语言的指针的基本语法
- C语言的指针的基本语法