删除带有强制转换为char *的char数组?

时间:2011-11-29 17:06:04

标签: c++

应该使用以下哪些?

char *ex = new char[255];
// code
delete [] ex;

char *ex = new char[255];
// code
delete [] (char *) ex;

我认为演员表没有必要,但它会对实际删除有什么影响吗?

3 个答案:

答案 0 :(得分:4)

char *ex = new char[255];
// code
delete [] ex;

你不需要施放,无论如何演员都不会有任何效果。

C ++标准不需要你进行任何投射。这是参考。

第§3.​​7.3.2.3节:

  

提供给标准库中提供的一个释放函数的第一个参数的值可以是空指针值;如果是这样,对释放功能的调用无效。 否则,标准库中提供给operator delete(void*)的值应为先前在标准库中调用operator new(size_t)operator new(size_t, const std::nothrow_t&)返回的值之一,以及值提供给标准库中的运算符delete[](void*)应该是之前调用标准库中operator new[](size_t)operator new[](size_t, const std::nothrow_t&)返回的值之一。

答案 1 :(得分:4)

没有必要,也没有效果。您正在向char*投射char*

答案 2 :(得分:0)

delete []破坏(或破坏)许多对象,然后释放内存。如果类型不是对象,它只是释放内存而不调用析构函数。这样会很好:

 class some_class
 {
       some_class(int);
 };

 ....
 some_class *p = new some_class[[2]](0)(1);

 delete[] p; // delete calculates how many objects where created, and call destructors of all objects, then frees the memory (which is twice sizeof(some_class)