delete刪除的該指針指向的內(nèi)存蚜锨,指針變成一個(gè)野指針
delete指針后,指針不一定為NULL:
//BanaryNode是一個(gè)自定義的類
BanaryNode* tree = new BanaryNode();
delete tree;
if(tree != NULL)
std::cout<<"NOT NULL"<<std::endl;
//最后輸出為NOT NULL
- 為了保證delete后指針安全,所以需要將指針賦為NULL
BanaryNode* tree = new BanaryNode();
delete tree;
tree = NULL;
- 在函數(shù)傳遞指針過程中,會(huì)出現(xiàn)這樣的問題:
void BanaryRemove(BanaryNode* tree)
{
if(tree == NULL)
return;
delete tree;
tree = NULL;
}
BanaryNode* tree = new BanaryNode();
BanaryRemove(tree);
if(tree != NULL)
std::cout<<"NOT NULL"<<std::endl;
//最后輸出為NOT NULL
因?yàn)?BanaryRemove(BanaryNode* tree)中傳遞的值tree的值栓拜,在函數(shù)中將 tree = NULL弹灭,只是將tree的副本賦值為NULL铐尚。
可通過引用傳遞解決問題裳食,通過直接對(duì)tree的操作而不是tree的副本
void BanaryRemove(BanaryNode* &tree)
{
if(tree == NULL)
return;
delete tree;
tree = NULL;
}