美文网首页
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问题

    delete删除的该指针指向的内存,指针变成一个野指针 delete指针后,指针不一定为NULL: 为了保证del...

  • C++内存

    认识C++内存 operator new, operator delete和new, delete operato...

  • new失败抛出异常吗?

    new/delete 在C++中动态分配与释放内存是通过new/delete和new []/delete []实现...

  • c++ new 和delete的种种

    new/delete动态管理对象,new[]/delete[]动态管理对象数组。 C++中,把int 、char....

  • 第4篇-C++ 的内存回收

    从前一篇《C/C++ 类和内存分配》我们已经简单地提过delete和delete操作符的用法,本文将从C++的语义...

  • 面试准备

    C++面试总结 New、Delete和malloc、free的区别? New和Delete自动调用 构造函数 和 ...

  • Boolan_C++面向对象高级编程(下)-第5周

    C++对象模型 Const 重载Operator new,Operator delete

  • C++ delete this

    先看一段代码: 上面看到这个Isolate类的成员函数里面竟然调用了delete this的语句,而且后面还有代码...

  • delete 和 delete []

    每一本 C++ 教材上都会告诉你,使用new,new [],delete 和 delete [] 的时候必须要配对...

  • GC基础

    1.什么是垃圾 C语言申请内存:malloc free C++: new delete c/C++ 手动回收内存 ...

网友评论

      本文标题:C++ delete问题

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