zoukankan      html  css  js  c++  java
  • C++学习008-delete与delete[]的差别

    对于简单的数据类型,delete与delete[]是没啥差别的,就是等价的

    例如  

    int main()
    {
    	int *pdata = new int[20];
    
    	delete pdata;
    	//delete[] pdata;
    		 
    
        return 0;
    }
    


    这两是等价的,没有什么区别,

    但是如果是一个动态分配数据的数据类型,就不同了,delete[]在释放数组控件前,对数组中每一个对象调用析构函数,而delete择仅仅是释放指针所指的控件

    例如

    class Student
    {
    private:
    	char* name;
    	int age;
    
    
    public:
    	Student() { name = new char[100]; };
    	~Student() { delete name; };
    
    
    
    };
    
    int main()
    {
    	Student* pData = new Student[20];
    
    
    	delete[] pData;
    
    		 
    
        return 0;
    }


    在这里如果使用了delete,那就会有意想不到的后果了,至于什么后果,在我尝试编译的时候 ,触发了中断。

    应该是内存访问有问题了。

  • 相关阅读:
    CSRF的安全问题
    preg_replace
    反汇编:虚函数表
    12.Proxy
    JS中的this
    11.Set 和 Map数据结构
    10.symbol
    9.对象的扩展
    test
    ES5支持的方法
  • 原文地址:https://www.cnblogs.com/DreamDog/p/9160109.html
Copyright © 2011-2022 走看看