zoukankan      html  css  js  c++  java
  • delete,delete[],delete void*

    renren6250(刀客)   的说法是比较全面的.  
      对于简单数据类型int,char等的数组使用delete   还是   delete[]是完全一样的,对于类的实例的数组必须使用delete[];  

     

    用了这么久的C++,才发现C++是目前所有的编成语言中最为复杂的一种,C++之路,   艰难.....

       
                delete void *

               这一操作对于一些简单的系统内建类型不会有问题,但如果void*所指向的对象在析构函数里要释放,进行此造作会丢失内存,因为它不执行析构函数,例如:                               
                                        
    class CEntity
    {
    public:
        CEntity(char flag);
        ~CEntity();
    private:
        void * m_data;
       char   m_flag;
    };

    CEntity::CEntity(char flag)
    {
       m_flag = flag;
        cout<<"constructing entity "<<m_flag<<endl;
        m_data = new char[100]; 
    }

    CEntity::~CEntity()
    {
        cout<<"destructing entity "<<m_flag<<endl;
        delete[] m_data;
    }

    以上这个类是没什么问题的,但是看以下的调用:
    int main(int argc, char* argv[])
    {
           CEntity * a = new CEntity('a');
           delete a;

           void * b = new CEntity('b');
           delete b;
     
           return 0;
    }

    其输出为: constructing entity a
                           destructing entity a
                           constructing entity b                                    
    可见,delete b 的时候没有释放m_data所指向的内存,没有执行析构函数。

    网上收集的,也不知道对不对,呵呵,多多评论一下,出错了不管

  • 相关阅读:
    内容生成器.计数器及多列
    STT-MTJ(自旋转移矩磁隧道结)模型的Verilog-A语言描述(仅参考)
    将进酒-唐·李白
    三十六计、孙子兵法
    Keil新建工程步骤
    No.6 Verilog 其他论题
    2-4 Numpy+Matplotlib可视化(二)
    2-3 Numpy+Matplotlib可视化(一)
    0-0 列表,元组,字典,集合
    2-2 Numpy-矩阵
  • 原文地址:https://www.cnblogs.com/dongzhiquan/p/1994799.html
Copyright © 2011-2022 走看看