【发布时间】:2015-05-13 09:18:54
【问题描述】:
我有一个用于删除缓冲区的函数。指针是按地址传递的,因此一旦内存被释放,函数也可以取消设置它们:
static void _FreeBuf( const uchar16_t ** pBufPtr );
void Ucs2String::_FreeBuf( const uchar16_t ** pBufPtr );
{
assert( NULL != pBufPtr && NULL != *pBufPtr );
delete[] *pBufPtr;
*pBufPtr = NULL;
}
但使用时如下:
_FreeBuf( & m_wsBuf );
m_wsBuf 是成员:uchar16_t * m_wsBuf;
它会产生错误:
Error 1 error C2664: 'core::Ucs2String::_FreeBuf' : cannot convert parameter 1 from 'uchar16_t **__w64 ' to 'const uchar16_t **'
删除 const 解决了这个问题,但我不明白为什么。 函数是修改地址传递的指针,而不是指向的const uchar16_t数组,那为什么要去掉这个const呢?
PS:我使用的是 VS2005(没有 C++11)
【问题讨论】:
-
FWIW,在
C中,您不需要指向free()的指针。 -
我在 C++ 中也不会。正如我所说,我通过地址传递指针,以便在释放内存后取消设置它们。
-
不相关,但不要使用前导下划线后跟大写字母those are reserved in all scopes的符号。
-
嗯,我知道双下划线,但不是我一直用于非公开事物的这个。很高兴知道。