delete 订阅
delete是指删除,常用于编程语言中(C++,SQL等等)。过去式:deleted;过去分词:deleted;现在分词:deleting;第三人称单数:deletes 展开全文
delete是指删除,常用于编程语言中(C++,SQL等等)。过去式:deleted;过去分词:deleted;现在分词:deleting;第三人称单数:deletes
信息
外文名
delete
现在分词
deleting
过去式
deleted
中文名
删除
应用领域
编程
delete基本信息
/di`li:t/v.tr.remove or obliterate(written or printed matter),通过esp.by striking out(尤指划掉)删除,删去(手写话印刷内容)[Latin delēre delet-'efface']对于文件名shift+delete可彻底删除。按住 SHIFT 键再单击“关闭”按钮(一般适用)
收起全文
精华内容
参与话题
问答
  • c++ new delete知识总结

    千次阅读 2017-07-12 16:16:33
    c++ new delete 局部重载 全局重载

    一、C++的动态对象创建

    当创建一个C++对象时,会发生两件事:
    (1)为对象分配内存
    (2)调用构造函数来初始化那个内存

    然而,为对象分配内存可以用以下几种方式或在可选择的时间发生:
    (1)在静态存储区域,存储空间在程序开始之前就可以分配。这个存储空间在整个运行期间都存在。
    (2)无论何时到达一个特殊的执行点(左大括号)时,存储单元都可以在栈上被创建。出了执行点(右大括号),这个存储单元自动被释放。这些栈分配运算内置于处理器的指令集中,非常有效。但是,在写程序的时候,必须知道需要多少个存储单元,以便编译器知道生成正确的指令。
    (3)存储单元也可以从一块称为堆的地方分配。这被称为动态内存分配。在运行时调用程序分配这些内存。这就意味着在任何时候可以分配内存以及分配多少内存,当然也需要负责决定何时释放内存。

    二、C++的new 和 delete

    C++中的解决方法是把创建一个对象所需的所有动作都结合在一个称为new的运算符里。我们当用new创建一个对象时,它就在堆里为对象分配内存并为这块内存调用构造函数。我们可以为类使用任何可用的构造函数,如果构造函数没有参数,可以写没有构造函数参数表的new表达式。

    new表达式的反面是delete表达式。delete表达式首先调用析构函数,然后释放内存。如果正在删除的对象的指针是0,将不发生任何事情。为此,我们经常建议在删除指针后立即把指针赋值为0以免对它删除两次,从而产生某些问题。

    #include <iostream>
    
    using namespace std;
    
    class B{
    public:
         B(){
            cout<<"class b is created"<<endl;
        }
        ~B(){
            cout<<"class b is deleted"<<endl;
        }
    
    };
    
    int main(){
    
        B *a=new B;
    
        delete a;
        cout<<"-----------------"<<endl;
    
        B *b=new B[3];
    
        //空的方括号告诉编译器产生代码,该代码的任务是将从数组创建时存放在某处的对象数量取回,并为数组的所有对象调用析构函数。
        delete []b;
    }
    
    最终打印结果为:
    class b is created
    class b is deleted
    -----------------
    class b is created
    class b is created
    class b is created
    class b is deleted
    class b is deleted
    class b is deleted
    

    三、重载局部new delete

    重载的new必须有一个size_t参数(不管是局部new还是全局new,不管是new 还是new[])。这个参数由编译器产生并传递给我们,它是要分配内存的对象的长度。必须返回一个指向等于这个长度(或者大于这个长度)的对象的指针。我们首先需要明白的一点就是:operator new()的返回值是一个void*。它所做的是分配内存,而不是完成一个对象建立–直到构造函数调用了才完成对象的创建,它是编译器确保做的动作,不在我们的控制范围之内了,所以我们就没有必要考虑。

    当在一个类内部重载new和delete的时候,我们称之为重载局部new delete。为一个类重载new和delete的时候,尽管不必显式的使用static,但是实际上仍是在创建static成员函数。它的语法也和重载任何其它运算符一样。当编译器看到使用new创建自己定义的类的对象时,它会选择相应版本的局部new delete函数去执行。

    #include <iostream>
    
    using namespace std;
    
    class A{
    public:
        static int count;
    
        A(){
        cout<<"class a is created"<<endl;
        }
        ~A(){
            cout<<"class a is deleted"<<endl;
        }
    
        //局部new重载
        /*注意:当执行A *a=new A时,会先调用这个局部new重载函数,然后调用了2次构造函数,但返回的对象的内存地址却是相同的一个,因此可以理解为只创建了一个对象,不知道为啥会调用2次构造函数。*/
        static void * operator new(size_t size){
            cout<<"jubu new is called"<<endl;
            count++;
            A *a=::new A;
    
            return a;
        }
    
        //局部delete重载
        static void operator delete(void *p){
            cout<<"jubu delete is called "<<p<<endl;
            count--;
            ::delete p;
    
        }
    
        //局部new[]重载
        static void * operator new[](size_t size){
            cout<<"jubu [] new is called"<<endl;
    
            return operator new(size);
        }
    
        //局部delete[]重载
        static void operator delete[](void *p){
            cout<<"jubu [] delete is called"<<endl;
            operator delete(p);
        }
    };
    
    int A::count=0;
    
    
    
    int main(){
        A *a=new A;//调用局部重载new
        delete a;//调用局部重载delete
        cout<<"-----------------"<<endl;
    
        A *b=new A[3];//调用局部重载new[]
        delete []b;//调用局部重载delete[]
    }
    上述程序输出结果为:
    jubu new is called
    class a is created   
    class a is created
    class a is deleted
    jubu delete is called 0x7111a0
    -----------------
    jubu [] new is called
    jubu new is called
    class a is created
    class a is created
    class a is created
    class a is created
    class a is deleted
    class a is deleted
    class a is deleted
    jubu [] delete is called
    jubu delete is called 0x7111a0
    

    四、全局new delete重载

    全局new delete重载,即相关的重载方法,写在和main方法同级的代码块中,针对整个系统有效,而上述局部new delete重载只是针对本类有效。

    #include <iostream>
    
    using namespace std;
    
    class A{
    public:
        static int count;
    
        A(){
            cout<<"class a is created"<<endl;
        }
        ~A(){
            cout<<"class a is deleted"<<endl;
        }
    
        //局部new重载
        static void * operator new(size_t size){
            cout<<"jubu new is called"<<endl;
            count++;
            A *a=::new A;
    
            return a;
        }
    
        //局部delete重载
        static void operator delete(void *p){
            cout<<"jubu delete is called "<<p<<endl;
            count--;
            ::delete p;
    
        }
    
        //局部new重载
        static void * operator new[](size_t size){
            cout<<"jubu [] new is called"<<endl;
    
            return operator new(size);
        }
    
        //局部delete重载
        static void operator delete[](void *p){
            cout<<"jubu [] delete is called"<<endl;
            operator delete(p);
        }
    };
    
    int A::count=0;
    
    //全局new重载
    void * operator new(size_t size){
        if(size==0){
            return 0;
        }
        void *p=malloc(size);
        cout<<"quanju new is called "<<p<<endl;
        return p;
    }
    //全局new[]重载
    void * operator new[](size_t size){
        cout<<"quanju[] new is called "<<endl;
        return operator new(size);
    }
    //全局delete重载
    void operator delete(void *p){
        cout<<"quanju delete is called "<<p<<endl;
        free(p);
    }
    //全局delete[]重载
    void operator delete[](void *p){
        cout<<"quanju[] delete is called "<<p<<endl;
        operator delete(p);
    }
    
    int main(){
        int *x=new int(12);
        delete x;
        cout<<"----------"<<endl;
    
        int *p=new int[10];
        delete []p;
        cout<<"-----------------"<<endl;
    
        A *a=new A;
        delete a;
        cout<<"-----------------"<<endl;
    
        A *b=new A[3];
        delete []b;
    }
    上述程序执行结果为:
    //int *x=new int(12);
    //delete x;
    quanju new is called 0x1e11a0
    quanju delete is called 0x1e11a0
    ----------
    //int *p=new int[10];
    //delete []p;
    quanju[] new is called
    quanju new is called 0x1e11a0
    quanju[] delete is called 0x1e11a0
    quanju delete is called 0x1e11a0
    -----------------
    //A *a=new A;
    //delete a;
    jubu new is called
    quanju new is called 0x1e11a0
    class a is created
    class a is created
    class a is deleted
    jubu delete is called 0x1e11a0
    quanju delete is called 0x1e11a0
    -----------------
    //A *a=new A[3];
    //delete []a;
    jubu [] new is called
    jubu new is called
    quanju new is called 0x1e11a0
    class a is created
    class a is created
    class a is created
    class a is created
    class a is deleted
    class a is deleted
    class a is deleted
    jubu [] delete is called
    jubu delete is called 0x1e11a0
    quanju delete is called 0x1e11a0
    

    五、总结

    当局部、全局new delete都被重载后,其和构造方法、析构方法的调用是有顺序的,具体如下图所示:
    这里写图片描述

    展开全文
  • 近期想仔细了解一下C++里的指针、内存分配的问题,所以想验证一下,当一个指针被delete之后的内存会发生什么,所以想尝试一下: ``` int main() { int *p = new int; int *p2; p2 = p; delete p2; ...
  • 今天在读《More Effective C++》的时候看到operator deletedelete operator的区别,文中强调operator new和operator delete搭配使用,但是真正的程序中因为编译器对着貌似并不感冒,使用delete operator释放内存也...
  • 为什么没有new也用delete ``` // Soln5_5.cpp #include #include char* parse(const char* str) { static char* pStr{}; static size_t len{}; static size_t start{}; size_t pos{}; char* pReturn{}; ...
  • Mac使用delete键向后删除字符

    万次阅读 2018-03-05 14:51:01
    mac和windows区别在Windows电脑中,有两个键可以实现删除的功能,一个是画着←的BackSpace退格键,一个是Delete键。退格键可以删除光标左边的文字,Delete键可以删除光标右边的文字,也可以用来删除文件。而在Mac...

    mac和windows区别

    在Windows电脑中,有两个键可以实现删除的功能,一个是画着←的BackSpace退格键,一个是Delete键。退格键可以删除光标左边的文字,Delete键可以删除光标右边的文字,也可以用来删除文件。

    而在Mac电脑中,删除只有一个标着Delete的键,单按此键可以删除光标左边的文字,那,其它删除功能怎么实现呢?下面我们就来介绍Mac电脑Delete键的5种用法。

    mac中delete键的5种用法

    第一种:按 delete 键,实现 Windows 键盘上退格键的功能,也就是删除光标之前的一个字符(默认);

    第二种:按 fn+delete 键,删除光标之后的一个字符;

    第三种:按 option+delete 键,删除光标之前的一个单词(英文有效);

    第四种:结合第二种,按住fn+option+delete,删除光标之后的一个单词;

    第五种:选中文件后按 command+delete,删除掉该文件。




    无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程




    原文地址:http://tech.sina.com.cn/s/jq/2015-03-06/doc-icczmvun6516277.shtml

    展开全文
  • delete请求报405急急急

    2015-12-04 03:16:05
    delete请求报405,这个deletey请求我用jquery改成posty请求了 ${emp.id}">[Delete] $(function(){ $(".del").click(function(){ var href = $(this).attr("href"); $("form").attr("action",href)....
  • free&delete&delete[]

    千次阅读 2011-06-09 17:06:00
    最近一些工作里需要处理些内存的东东,需要把delete,... 跟了下几个汇编delete汇编化是:call destructor.call delete(void*)->free+一些判断 free就是free delete[]是调相应数量的destructor,delete(void*)so:所

    最近一些工作里需要处理些内存的东东,需要把delete,free,delete[]分清楚。

     

    跟了下几个汇编

    delete汇编化是:

    • call destructor.
    • call delete(void*)->free+一些判断

     

    free就是free

     

    delete[]是

    • 调相应数量的destructor,
    • delete(void*)

    so:

    • 所以如果是POD的话,错调了delete(应该调用delete[])并不会造成内存泄漏,一般的内存泄露是来源与destructor少掉了时候。
    • 对于POD的话,不用在意delete[]和delete调用的正确与否,甚至直接free也可以

    下面是c++的delete和free

     

     

     

    展开全文
  • drop与delete的区别

    万次阅读 多人点赞 2018-08-04 10:00:28
    drop与delete的区别: 初学sql语言,难免被drop和delete用法弄混,二者都有删除的意思。那它们又有什么区别呢? drop主要用于删除结构 例如删除数据库:drop database XX,删除表 drop table XX。字段...

    #drop与delete的区别:
    初学sql语言,难免被drop和delete用法弄混,二者都有删除的意思。那它们又有什么区别呢?

    drop主要用于删除结构

    例如删除数据库:drop database XX,删除表 drop table XX。字段也是结构的一种,也可以使用drop了?对的,但是我们改变了表结构要先alter方法。例如,我们要删除student表上的age字段的信息,可以这样写:alter table student drop age

    delete主要用于删除数据

    举个例子,要删除 student表上名字为‘张三’的所有信息:delete from student where name=‘张三’。这种情况下用delete,由此可见delete常用于删除数据。

    展开全文
  • https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-delete-by-query.html 之前在 2.X版本里 这个Delete By Query功能被去掉了,因为官方认为会引发一些错误,如需使用 ...
  • 假设有三个文件,分别为main.cpp,IRSend.cpp,IRSend.h IRSend.h内容为: ...请问上面new结构体和delete结构体有问题吗?(我的程序类似于上面) 为什么执行后编译能通过,就是得不到想要的效果。
  • delete p和delete[] p的区别

    千次阅读 2012-12-13 15:54:38
    operator new 和 operator delete函数有两个重载版本,每个版本支持相关的new表达式和delete表达式:  void* operator new (size_t); // allocate an object  void* operator new [] (size_t); // allocate an ...
  • [C++] 关于deletedelete[]

    千次阅读 2010-02-18 15:56:00
    首先贴一段MFC的源代码: void __cdecl operator delete(void* p){ free(p);} void __cdecl operator delete[](void* p){ ::operator delete(p);} 然后贴一点汇编:  char* p = new char[100
  • javax.persistence.TransactionRequiredException: Executing an update/delete query 的异常,实在无力了,希望有大大来帮助 2015-04-29 23:44:12,534[INFO ]...
  • <input type="hidden" value="DELETE" name="_method"/> 编号 用户名 密码 邮箱 操作 ${requestScope.list}" var="list"> ${list.userId} ${list.userName} ...
  • 把析构函数里的delete去掉就不会报错了;但是搞不懂:我的构造函数里不是用了new吗,为什么会出现这种情况? 报错信息是:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse),网上查了一下都说是重发调用delete的结果,但是我...
  • truncate与delete的区别

    万次阅读 2019-03-10 11:15:44
    最近到了系统开发后期,需要对数据进行按时间备份。备份完成后对之前数据表的处理就只有删除了,突然查下...这种快速删除与delete from 数据表的删除全部数据表记录不一样,delete命令删除的数据将存储在系统回滚...
  • C++ DELETE 操作

    千次阅读 2013-05-24 23:36:48
    在C++中delete指针前不用进行指针是否为空的判断,因为delete的实现已经做了这件事情!  使用deletedelete已释放的指针是一个严重的错误,所以要在delete完一个指针后手动把它置空! 因为delete空指针是安全的...
  • 因为源代码中有大量的delete this,会造成很多意想不到的问题,所以我希望把结构改为如下代码,将delete this改为killMe。有大神能帮忙看看下面的代码有什么问题吗?走到killme中的delete me;的时候,它不进析构函数...
  • Hbase 通过shell 执行deletedeleteall命令不能删除数据 还在执行完truncate命令后,再对表执行scan,count等命令报 org.apache.hadoop.hbase.NotServingRegionException: Region internet:sina_information,,...
  • #include #include using namespace std; void main() { char *str1 = new char; char *str2 = new char;... cout **********比较两个字符串大小******... delete str1; str1 = NULL; delete str2; str2 = NULL; }
  • sql delete

    千次阅读 2019-06-12 15:14:48
    delete from stu where name=‘huang’; 数据删除 truncate,删除全表 , 删除速度快,不放入回收站,释放空间 delete, 删除效率慢,进回收站,不释放空间,能被回滚 表删除 drop ,删除表 ,表结构也删除了 例如:...
  • js数组删除(splice和delete

    万次阅读 多人点赞 2018-01-17 22:34:57
    今天用到了数组的删除,分别使用了splice和delete方法,记录一下,方便下次查找。原数组是一个关联数组,如var test=[];test[1]={name:'1',age:1};test[2]={name:'2',age:2};test[4]={name:'3',age:3};console.log...
  • String sql="delete from student where Stuid='"+student.getStuid()+"'"; st.execute(sql);*/ //把sql语句打出来 System.out.println(sql); //返回值 return 0; //异常处理 }catch...
  • 主外键关联,当删除的是父表数据,参照这些要删除的数据,Oracle有三种处理方式: 1、禁止删除,也是Oracle默认方法。...对于2,需要使用on delete set null建立外键约束。实验: create table dept_test (d
  • for(i = height*(width/1201+1);i > 0;i--) { QByteArray datagram; datagram.resize(width+11);... delete[]senderbuffer[i]; } delete[]senderbuffer; 请问我这样释放内存为何不行?
  • 16:35:30,959 ERROR SqlExceptionHelper:146 - Cannot delete or update a parent row: a foreign key constraint fails (`mall`.`orderitem`, CONSTRAINT `FK_hth7ctygtqa5ov7kutghwa1ni` FOREIGN KEY (`uid`) ...
  • 问题:mybatis在一个delete标签写多条delete语句 解决办法:直接写多条delete语句 <delete id="deleteComboInfo"> delete from amb_pairs where id in <foreach collection="id.split(',')" close=")" ...
  • C++中的deletedelete[ ]的区别

    万次阅读 多人点赞 2018-07-04 23:24:00
    以前看书的时候,书上说使用new申请的内存,释放时用delete,使用new [ ]申请的内存释放时要用delete [ ]才行,这两个一定要记住,申请时用了方括号,则释放时也要加上方括号,否则就会出错。但是并没有解释为什么...
  • C++ new和delete

    千次阅读 2020-05-07 20:23:14
    在C语言中,动态分配内存用 malloc() 函数,释放内存用 free() 函数。...在cpp中,这两个函数仍然可以使用,但是C++又新增了两个关键字,new 和 delete:new 用来动态分配内存,delete 用来释放内...
  • InnoDB delete原理解析

    千次阅读 2018-04-30 17:05:20

空空如也

1 2 3 4 5 ... 20
收藏数 186,644
精华内容 74,657
关键字:

delete