我看到delete[]
可以釋放一個對象數組。然而,在我讀過的任何消息來源中都沒有提及它是否是錯誤的或未定義的,以提供像delete[3]
這樣的參數。我可以提供參數來刪除[]像刪除[3]?
我有以下疑問。
- 是在C++標準的規定是否我可以/不可以suplly一個參數
delete[]
爲delete[3]
? - 如果是,那麼效果如何?
- 此外,它是在C++中指定我是否可以使用
delete
作爲從new[]
分配的數組?
我看到delete[]
可以釋放一個對象數組。然而,在我讀過的任何消息來源中都沒有提及它是否是錯誤的或未定義的,以提供像delete[3]
這樣的參數。我可以提供參數來刪除[]像刪除[3]?
我有以下疑問。
delete[]
爲delete[3]
?delete
作爲從new[]
分配的數組?(1)是的,它指定你不能。
(3)它指定的結果是不確定的,所以不要。
是的,你可以通過delete [x]
運算符傳遞任何參數,但它沒有意義。 如果你會提及destructor
class
那麼它將調用destructor
無限的時間。 參見下面的例子
#include <iostream>
using namespace std;
class A
{
public:
A() {
cout<<"\n Calling A constructor ";
}
/*~A(){
cout<<"\n Calling A Destructor ";
}*/
};
int main()
{
A *a1= new A();
delete [3] a1;
return 0;
}
這上面的程序(測試用VC)編譯和運行成功,如果未註釋的那部分destructor
然後編譯成功但destrutor
將調用無限的時間,這是程序的未定義的行爲。
對不起這個問題,但你爲什麼要給一個參數刪除? –
不要將它與'delete array [3]'混淆,刪除'array [3]'指向的任何東西(所以如果你有一個指針數組),並且不會刪除'array'或者它的某個部分。如果你想這樣做,刪除子數組是不可能的。 – leemes
編寫函數'void move_from_array(int * target,int * source){ * target = * source; delete [1] source ++;/*或簡單地刪除源++ */ target ++; }' – pasha