C++之new和delete操作符

在C语言中的动态分配和释放内存的函数是malloc calloc 和 free , 而在C++中要用 new new[] delete delete[] 来申请动态空间和释放空间。

注意:的是new、new[]、delete和delete[]是操作符,而非函数;new和delete也是C++的关键字。

操作符new用于动态分配单个空间,而new[]则是用于动态分配一个数组,操作符delete用于释放由new分配的空间,delete[]则用于释放new[]分配的一个数组。

下面是简单的实例代码

using namespace std;

int main()
{
   int *p = new int (5);
   int *q = new int[10];
   *q = 80;
   q++;
   *q = 293;
   cout << *q << endl;
   cout << *p << endl;
   delete p;
   return 0;
}

运行结果

293
5

为了避免内存泄露,通常new和delete、new[]和delete[]操作符应该成对出现,并且不要将这些操作符与C语言中动态分配内存和释放内存的几个函数一起混用。建议在编写C++程序时尽量使用new、new[]、delete和delete[]操作符进行动态内存分配和释放,而不要使用C语言中内存分配和释放的函数,这是因为new、new[]、delete和delete[]操作符可以使用C++的一些特性,如类的构造函数和析构函数,能够更好地管理C++程序的内存。

时间: 2024-10-15 01:27:10

C++之new和delete操作符的相关文章

C++ new delete操作符

//new delete操作符 #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; /* 1.new delete 操作符号 都是 c++的关键字 类似于 C语言中的 malloc free 2.定义对象时,使用了new关键字,会为这个对象在堆上分配内存,不使用new 关键字会直接在栈上分配内存 new 关键字可以分配基础类型内存,数组类型内存,对象类型内存 对于基础类型内存和数组类型内存,new de

js中的内部属性与delete操作符

本文正式地址:http://www.xiabingbao.com/javascript/2015/08/03/javascript-delete-configurable 在讲解Configurable之前,我们首先来看一道面试题: a = 1; console.log( window.a ); // 1 console.log( delete window.a ); // false console.log( window.a ); // 1 var b = 2; console.log( w

js小知识 delete操作符

说明:delete操作符用于删除对象的某个属性. 语法: delete object.property //删除 对象.属性 delete object['property'] //删除 对象['属性'] 返回值:bool类型,成功删除的时候回返回true,否则返回false. 注意: 如果你删除的属性在对象上不存在,那么delete将不会起作用,但仍会返回true 如果 delete 操作符删除成功,则被删除的属性将从所属的对象上彻底消失.然后,如果该对象的原型链上有一个同名属性,则该对象会从

Javascript的变量与delete操作符

原文:http://charlee.li/javascript-variables-and-delete-operator.html 刚刚看到一篇好文(原文链接), 对Javascript中的delete操作符分析得很透彻.在这里简单地介绍一下内容. 虽然是一个小小的delete操作符,其行为却异常复杂. # Javascript的变量 实际上Javascript中,变量 = 对象属性,这是因为 Javascript 在执行脚本之前 会创建一个Global对象,所有的全局变量都是这个Global

[转]深入详解javascript之delete操作符

最近重新温习JS,对delete操作符一直处于一知半解的状态,偶然发现一篇文章,对此作了非常细致深入的解释,看完有茅塞顿开的感觉,不敢独享,大致翻译如下. 原文地址:http://perfectionkills.com/understanding-delete/ P.S. 作者是PrototypeJS的开发组成员之一 ========分割线======== 在开始之前,先让我们看一段代码 Js代码     >>> var sum = function(a, b) {return a + 

c++ new和delete操作符的重载

先分析一条语句: Base *pb= new Base; 这条语句是怎么执行的?首先,这个函数调用标准C++的operator new()函数,然后调用Base的构造函数. 如果我们自定义new时,可以自定义一个new,如 class Base { static void* operator new(size_t size) { } static void operator delete(void *p) { } } 这个Base类里面的new 和delete覆盖掉标准new和标准delete,

javascript delete操作符

delete 操作符是从某个对象上移除指定属性,成功删除的时候返回 true ,否则返回 false. 如果删除的属性在对象上不存在,那么 delete 将不起作用,但仍会返回 true. var person = { age:100, name:"yangguo", } console.log(person.name);//yangguo console.log(delete person.name);//true console.log(person.name);//undefin

JS的 delete操作符 删除对象属性

JS如何删除对象中的某一属性 var obj={ name: 'zhagnsan', age: 19 } delete obj.name //true typeof obj.name //undefined 通过delete操作符, 可以实现对对象属性的删除操作, 返回值是布尔 如果你试图删除的属性不存在,那么delete将不会起任何作用,但仍会返回true 如果对象的原型链上有一个与待删除属性同名的属性,那么删除属性之后,对象会使用原型链上的那个属性(也就是说,delete操作只会在自身的属性

2.16 C++类与new和delete操作符

参考: http://www.weixueyuan.net/view/6347.html 总结: 当我们需要为类对象动态分配存储空间时,我们应该使用C++语言提供的new与new[]操作符,而不要使用C语言提供的malloc函数. 虽然malloc函数具有分配存储空间的功能,但是这些函数除了分配存储空间外,不会调用类的构造函数.而C++语言提供的new和new[]操作符则不会如此,使用它们为对象分配存储空间的同时,它们也会调用相应的构造函数. 操作符delete和delete[]在释放对象存储空