向大家请教一个问题:
假设有如下定义:struct Mutex
{
static void* createMutex( void );
static void destroyMutex( void* );
static bool lockMutex( void *mutex, bool block = true);
static void unlockMutex( void* );
};///////////
void * Mutex::createMutex()
{
CRITICAL_SECTION * mutex = new CRITICAL_SECTION;
InitializeCriticalSection(mutex);
return((void*)mutex);
}void Mutex::destroyMutex(void * mutex)
{
AssertFatal(mutex, "Mutex::destroyMutex: invalid mutex");
DeleteCriticalSection((CRITICAL_SECTION*)mutex);
delete mutex;
}
//针对以上定义有如下的调用:
void *gEventQueueMutex;
gEventQueueMutex= Mutex::createMutex();....我们可以发现Mutex::createMutex用的是一个局部指针mutex ,后边有个return((void*)mutex);把这个局部指针返了回去,我想知道的是把这种局部指针返回去的做法是否有问题或者隐患,请各位高手给以指点
,十分感谢!
假设有如下定义:struct Mutex
{
static void* createMutex( void );
static void destroyMutex( void* );
static bool lockMutex( void *mutex, bool block = true);
static void unlockMutex( void* );
};///////////
void * Mutex::createMutex()
{
CRITICAL_SECTION * mutex = new CRITICAL_SECTION;
InitializeCriticalSection(mutex);
return((void*)mutex);
}void Mutex::destroyMutex(void * mutex)
{
AssertFatal(mutex, "Mutex::destroyMutex: invalid mutex");
DeleteCriticalSection((CRITICAL_SECTION*)mutex);
delete mutex;
}
//针对以上定义有如下的调用:
void *gEventQueueMutex;
gEventQueueMutex= Mutex::createMutex();....我们可以发现Mutex::createMutex用的是一个局部指针mutex ,后边有个return((void*)mutex);把这个局部指针返了回去,我想知道的是把这种局部指针返回去的做法是否有问题或者隐患,请各位高手给以指点
,十分感谢!
解决方案 »
- 在视图类的鼠标移动事件中如何获取鼠标移动事件创建的时间?
- sizeof和strlen一个有趣的问题
- sprintf fprintf printf vprintf 等之间的区别是什么?
- 在线等。。。。。。50分求地理信息系统算两点通视的算法。。。。
- 字符垂直输出的问题
- 急:在当前活动对话框中的pretranslatemessage中捕获到一个键盘消息退出这个对话框,回到上一层对话框,怎么做呢,给点代码
- 问一个傻傻的问题:怎么在对话框中使用CScrollView
- Wnd的Parent和Owner有什么区别?
- 有人知道怎样通过窜口控制一个开关吗(编程实现)?
- 为什么找不到'WM_CLOSE'
- ? 关于OpenGL 贴纹理的问题 ?
- 2个对话框显示图片的问题
{
CRITICAL_SECTION * mutex = new CRITICAL_SECTION;
InitializeCriticalSection(mutex);
return((void*)mutex);
}
函数传递的指针,如果保存忘记,就可能产生内存泄露lz可以考虑采用RTTI方式,这样设计mutex
struct Mutex
{
Mutex()
{
mutex = new CRITICAL_SECTION;
InitializeCriticalSection(mutex);
}
~Mutex()
{
AssertFatal(mutex, "Mutex::destroyMutex: invalid mutex");
DeleteCriticalSection((CRITICAL_SECTION*)mutex);
delete mutex;
}
bool lockMutex( void *mutex, bool block = true);
void unlockMutex( void* );
private:
CRITICAL_SECTION * mutex;
};