2011-11-29 56 views
2

這些應該使用哪一個?用char轉換char *來刪除char數組?

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

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

我想,中投是沒有必要的,但它會對實際刪除有什麼影響?

+1

演員什麼都不做,但即使沒有你的兩個例子仍然會表現相同,因爲操作數的類型爲'刪除[]'是'字符*'在這兩種情況下。 – Jon

回答

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&)返回。

4

這是沒有必要的,並沒有任何效果。您正在將char*投射到char*

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)