美文网首页
C++ delete问题

C++ delete问题

作者: 三木仔 | 来源:发表于2016-07-18 23:50 被阅读23次
    1. delete删除的该指针指向的内存,指针变成一个野指针

    2. delete指针后,指针不一定为NULL:

       //BanaryNode是一个自定义的类   
        BanaryNode* tree = new BanaryNode();
        delete tree;
        if(tree != NULL)
          std::cout<<"NOT NULL"<<std::endl;
        //最后输出为NOT NULL
    
    1. 为了保证delete后指针安全,所以需要将指针赋为NULL
        BanaryNode* tree = new BanaryNode();
        delete tree;
        tree = NULL;
    
    1. 在函数传递指针过程中,会出现这样的问题:
     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
    

    因为 BanaryRemove(BanaryNode* tree)中传递的值tree的值,在函数中将 tree = NULL,只是将tree的副本赋值为NULL。

    可通过引用传递解决问题,通过直接对tree的操作而不是tree的副本

      void BanaryRemove(BanaryNode* &tree)
      {
        if(tree == NULL)
          return;
        delete tree;
        tree = NULL;
      }
    

    相关文章

      网友评论

          本文标题:C++ delete问题

          本文链接:https://www.haomeiwen.com/subject/hjlmjttx.html