能力值:
( LV9,RANK:610 )
|
-
-
2 楼
if (0 == lstrcmpiA("b", p->pszID))
{
*p->pIndex = index;
printf("%d\n", *p->pIndex);
}
delete p->pIndex;
这样是不是就不会泄漏了?
|
能力值:
( LV15,RANK:670 )
|
-
-
3 楼
我觉得神奇的地方在于驱动表里可以直接 new ,这样很方便。
不过 new 之后就必须用显式方法全部释放掉才行。
另外,在全局中使用会造成隐患。
我不理解为什么 new 可以放在驱动表里面呢?
|
能力值:
( LV8,RANK:130 )
|
-
-
4 楼
当然可以呀,怎么申请就怎么释放呗。
for (size_t i = 0; i < sizeof(table)/sizeof(table[0]); ++i)
delete table[i].pIndex;
|
能力值:
( LV3,RANK:20 )
|
-
-
5 楼
全局中使用有什么隐患?
我不理解为什么 new 可以放在驱动表里面呢?
也许C++标准8.5节可以解答此问题。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
刚试了下下面的代码
int _tmain(int argc, _TCHAR* argv[])
{
const struct
{
char *const pszID;
int *pIndex;
}table[] = {
{"a", new int},
{"b", new int},
{"c", new int},
{"d", new int}
}, *p;
long table_count = sizeof(table)/sizeof(table[0]);
p = table;
for (long index = 0; index < table_count; ++index, ++p)
{
if (0 == lstrcmpiA("b", p->pszID))
{
*p->pIndex = index;
printf("%d\n", *p->pIndex);
}
//加上下面这一句没有问题;
delete p->pIndex;
//加上下面这一句编绎错误;error C2166: 左值指定 const 对象
//p->pIndex = NULL;
}
system("pause");
return 0;
}
|
能力值:
( LV15,RANK:670 )
|
-
-
7 楼
释放后造成野指针.
不释放看着别扭.
|
能力值:
( LV3,RANK:20 )
|
-
-
8 楼
const_cast<char*>(p->pIndex)=NULL;
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
匿名变量,java里面是常用的东西,不过C++里面还是很少见的。。。因为这样写释放内存不方便,java就没有这个隐忧
|
能力值:
( LV15,RANK:670 )
|
-
-
10 楼
又长见识了,原来还有 匿名变量 , 匿名对象 这些东西.
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
java里面一般这么叫。。匿名对象,匿名类 什么的(比如ActionListener经常这么用),以后没准还会有个匿名函数,
C++就不知道是不是也这么叫了,
PS:cntrump的VC很好用啊,膜拜一下~~
|
|
|