首页
社区
课程
招聘
[原创]神奇的 new
发表于: 2011-3-8 23:19 6315

[原创]神奇的 new

2011-3-8 23:19
6315

    今天偶然发现能这样用,求解释。
这种用法很明显会造成内存泄漏,有没有更好的方法?


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (10)
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
2
if (0 == lstrcmpiA("b", p->pszID))
    {
      *p->pIndex = index;
      printf("%d\n", *p->pIndex);
    }
   delete p->pIndex;
这样是不是就不会泄漏了?
2011-3-8 23:42
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
3
我觉得神奇的地方在于驱动表里可以直接 new ,这样很方便。
不过 new 之后就必须用显式方法全部释放掉才行。
另外,在全局中使用会造成隐患。

我不理解为什么 new 可以放在驱动表里面呢?
2011-3-8 23:46
0
雪    币: 63
活跃值: (17)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
当然可以呀,怎么申请就怎么释放呗。
for (size_t i = 0; i < sizeof(table)/sizeof(table[0]); ++i)
    delete table[i].pIndex;
2011-3-9 09:24
0
雪    币: 724
活跃值: (81)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
全局中使用有什么隐患?

我不理解为什么 new 可以放在驱动表里面呢?

也许C++标准8.5节可以解答此问题。
2011-3-9 10:01
0
雪    币: 217
活跃值: (22)
能力值: ( 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;
}
2011-3-9 10:13
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
7
释放后造成野指针.
不释放看着别扭.
2011-3-9 10:44
0
雪    币: 724
活跃值: (81)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
const_cast<char*>(p->pIndex)=NULL;
2011-3-9 13:47
0
雪    币: 233
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
匿名变量,java里面是常用的东西,不过C++里面还是很少见的。。。因为这样写释放内存不方便,java就没有这个隐忧
2011-3-10 11:28
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
10
又长见识了,原来还有 匿名变量 , 匿名对象 这些东西.
2011-3-10 11:55
0
雪    币: 233
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11

java里面一般这么叫。。匿名对象,匿名类 什么的(比如ActionListener经常这么用),以后没准还会有个匿名函数,
C++就不知道是不是也这么叫了,
PS:cntrump的VC很好用啊,膜拜一下~~
2011-3-10 16:04
0
游客
登录 | 注册 方可回帖
返回
//