这种基础c++用法是否会产生有关问题
这种基础c++用法是否会产生问题
向大家请教一个问题:
假设有如下定义:
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);把这个局部指针返了回去,我想知道的是把这种局部指针返回去的做法是否有问题或者隐患,请各位高手给以指点
,十分感谢!
------解决方案--------------------
不会出现任何问题。楼主对值传递和引用传递的概念不清楚,建议把谭浩强的那本入门书上的习题都搞懂了,在进行实际编程工作,要不然会被烦死的。
------解决方案--------------------
当然不会有问题,因为虽然返回的是局部指针,实际上返回的是指针所指的地址,而这个地址是动态申请的,不是局部变量的地址,并不会随着函数的结束而释放,所以地址里的数据仍然是有效的
------解决方案--------------------
不会有问题
------解决方案--------------------
这样做,需要在外部保存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;
};
向大家请教一个问题:
假设有如下定义:
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);把这个局部指针返了回去,我想知道的是把这种局部指针返回去的做法是否有问题或者隐患,请各位高手给以指点
,十分感谢!
------解决方案--------------------
不会出现任何问题。楼主对值传递和引用传递的概念不清楚,建议把谭浩强的那本入门书上的习题都搞懂了,在进行实际编程工作,要不然会被烦死的。
------解决方案--------------------
当然不会有问题,因为虽然返回的是局部指针,实际上返回的是指针所指的地址,而这个地址是动态申请的,不是局部变量的地址,并不会随着函数的结束而释放,所以地址里的数据仍然是有效的
------解决方案--------------------
不会有问题
------解决方案--------------------
这样做,需要在外部保存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;
};