C++中new和delete的介绍

 更新时间:2018年12月21日 09:47:18   作者:蜗牛201  
今天小编就为大家分享一篇关于C++中new和delete的介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

介绍

1.malloc,free和new,delete区别。

  • a.malloc,free是C/C++的标准库函数。new,delete是c++的操作符。
  • b.malloc申请的是内存,严格意义不是“对象”,new申请的可以理解为“对象”,new 时会调用构造函数,返回指向该对象的指针。
  • c.对于class类型,必须用new/delete来创建和销毁,自动调用构造和析构函数,malloc/free无法胜任。

2.使用new遵循原则:

  • a.用new申请的内存,必须用delete释放。
  • b.用new[]申请的内存,必须用delete[]释放。
  • c.delete释放内存后,指针值不变,良好的风格是释放后指针置为NULL,如,delete p; p = NULL。

使用

1.申请一个对象

 int* p1 = new int;
 delete p1;
 p1 = NULL;

2.申请多个对象

 int* p1 = new int[12];
 delete[] p1;
 p1 = NULL;

3.申请一个长度为1024的char数组

 char* pArray = new char[1024];
 for (int i=0; i < 1024; i++)
 {
 pArray[i] = i;
 }
 delete[] pArray;
 pArray = NULL;

4.申请一个类对象

#include <stdio.h>
class Student
{
public:
 char name[32];
 int age;
};
int main()
{
 Student* pStu = new Student();
 delete pStu;
 pStu = NULL;
 return 1;
}

5.申请1024个类对象

#include <stdio.h>
class Student
{
public:
 int age;
 Student()
 {
 ...
 }
 ~Student()
 {
 ...
 }
};
int main()
{
 Student* pStu = new Student[1024];
 for (int i=0; i<1024; i++)
 {
 pStu[i].age = i+1;
 }
 delete[] pStu;
 pStu = NULL;
 return 1;
}

new多个对象不能传参数,要求该类必须有默认构造函数。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • C++实现KDTree 附完整代码

    C++实现KDTree 附完整代码

    这篇文章主要介绍了C++实现KDTree的代码详解,包括kdTree概念介绍及分割的作用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07
  • C++可变参数函数的实现方法示例

    C++可变参数函数的实现方法示例

    这篇文章主要给大家介绍了关于C++可变参数函数的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • VSCode之CMake使用小结

    VSCode之CMake使用小结

    本文主要介绍了VSCode之CMake使用小结,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-03-03
  • 详解C语言基础的类型转换

    详解C语言基础的类型转换

    这篇文章主要为大家介绍了C语言基础的类型转换,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11
  • C++中 静态局部变量实例详解

    C++中 静态局部变量实例详解

    这篇文章主要介绍了C++中 静态局部变量实例详解的相关资料,需要的朋友可以参考下
    2017-03-03
  • C语言编写简单拼图游戏

    C语言编写简单拼图游戏

    这篇文章主要为大家详细介绍了C语言编写简单拼图游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • Qt模仿Windows文件夹缩略图的三种实现方式

    Qt模仿Windows文件夹缩略图的三种实现方式

    本文讲的不是简单的model/view或者widget的或者QML的基础框架实现,而是在这些框架之上的肉(文件夹缩略图)的效果实现,本文将以QWidget、Qt Quick(QML)、以及QGraph三种实现方式来讲解,如何做出和Windows类似的缩略图,需要的朋友可以参考下
    2024-04-04
  • C++统计中英文大小写字母、数字、空格及其他字符个数的方法

    C++统计中英文大小写字母、数字、空格及其他字符个数的方法

    这篇文章主要介绍了C++统计中英文大小写字母、数字、空格及其他字符个数的方法,涉及C++字符串的遍历与简单判定技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-05-05
  • c++ *运算符重载

    c++ *运算符重载

    运算符重载重载运算符是C++ 的一个重要特性,使用运算符重载, 的一个重要特性,使用运算符重载, 重载运算符是程序员可以把C++ 运算符的定义扩展到运算分量是对象
    2014-09-09
  • 利用C/C++二进制读写png文件的方法示例

    利用C/C++二进制读写png文件的方法示例

    最近在做项目的时候遇到了这个问题,所以想着总结下,方法自己和有需要的朋友,下面这篇文章主要介绍了利用C/C++二进制读写png文件的方法,需要的朋友可以参考借鉴,下面来一起看看吧。
    2016-12-12

最新评论