向大家请教一个问题:
假设有如下定义: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);把这个局部指针返了回去,我想知道的是把这种局部指针返回去的做法是否有问题或者隐患,请各位高手给以指点
,十分感谢!

解决方案 »

  1.   

    这样做,需要在外部保存void * Mutex::createMutex()
    {
    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;
    };