C++中new和delete运算符的运用,以及和C语言中malloc和free函数的区别

本文详细介绍了C++中new和delete操作符的用法及其与C语言中malloc和free的区别。主要内容包括基础类型变量、数组变量及类对象的动态内存分配与释放过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//new和delete的用法
#include<iostream>
#include<cstdlib>
using namespace std;
/*1:new和delete    操作符是C++的语法,像C语言中的malloc 和 free关键字;
     malloc和free是C语言的函数,new和delete是C++的操作符,这两个意义不一样。 
2: 利用new可以进行这些操作::基础类型变量,分配数组变量,分配类对象。  
3:new 运算符动态分配堆内存
   使用形式:指针变量=new 类型(常量)
             指针变量=new 类型【表达式】
    作用:从堆分配一块“类型”大小的存储空间,返回首地址。
    其中:“常量”是初始化值,可缺省
          创建数组对象时,不能为对象指定初始值。
    delete运算符释放已分配的内存空间
    使用形式:delete 指针变量;
              delete【】指针变量
    其中:"指针变量必须是一个new返回的指针" */

//new分配基础类型的 
int main01() 
{
    int *p=(int *)malloc(sizeof(int));   *p=10; 
    free(p);//C语言中分配内存,并且为这个指针变量赋值
    int *p2=new int; *p2=20;
    free(p2);//C++中new关键字 分配基础类型的用法,随后进行赋值 
    int *p3=new int(30);
    delete p3; //在分配基础类型时候,直接进行初始化 ,在C语言中用free进行释放,
               // 而在C++中也可以用delete释放,基础类型直接是delete加上指针变量名; 
    cout<<"hello"<<endl;
    return 0;
 } 
 //new分配数组变量
  int main02()
  {
      //C语言中分配数组 
      int *p=(int *)malloc(sizeof(int)*10);//==int array[10];
        p[0]=1; free(p) ;//C++中释放直接用free; 
      //C++中分配数组
       int *parray=new int [10];
       parray[1]=2;
       delete [] parray; //C++中用delete释放内存不要忘了[]符号。
       
           char *parray2=new char[20];
           delete [] parray2; 
      cout<<"hello"<<endl;
      return 0; 
   } 
class test
{
    private:
        int a;
        public:
            test(int _a)
            {
                a=_a;
            }
            protected:
};
//分配类对象
  int main03()
  {
          //c
          test *pt1=(test *)malloc(sizeof(test));//malloc可以malloc类这种类型的
          free(pt1);
          //C++
          test *pt2=new test(10);//new可以自动调用类写的构造函数 
          delete pt2;  //delete操作符能执行类 的析构函数 
        cout<<"hello"<<endl;
        return 0;    
   }
 /*  请问:用new分配的内存可以用free释放吗?
           用malloc分配的内存可以用delete释放吗? */
//1:分配基础类型的时候 
int main04() //基础类型的时候,用new和malloc混搭是没有问题的; 
{
    int *p=(int *)malloc(sizeof(int));   *p=10; 
    delete p;
    int *p2=new int; *p2=20;
    free(p2);    
 } 
//2:分配数组类型的时候
int main05() //下面的为int类型的数组,所以用new和malloc也是没有问题,但是如果是test、类,则结果另当别论 
{
    int *p=(int *)malloc(sizeof(int)*10);
    p[0]=1;  delete []p; 
    int *parray=new int [10];
     parray[1]=2;
       free(parray);
 } 
//分配类对象的时候
//malloc 和free 属于C语言的函数,他不会调用这个类构造函数,他只会分配内存大小
//但是new不光可以分配内存,还可以调用构造函数,来完成对对象的初始化
//new和malloc的最大区别,new可以初始化对象,malloc不行
//delete不光可以释放内存,还可以调用析构函数,而free不会调用析构函数 
int main()
{
    test *pt1=(test *)malloc(sizeof(test));
    delete pt1;
    test *pt2=new test(10);
    free(pt2);
 } 
 /*结论:
 malloc不会调用类的构造函数;
 free不会调用类的析构函数*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值