c++ 指针与内存管理

new/delete与malloc/free区别

基本数据类型:int, char, short, long, double…及数组

 	int *p = new int(5);
    cout<<" p="<<p<<endl;
    delete p;//free(p);//对于基本数据类型,效果一样,数组delete []p;
    cout<<" p="<<p<<endl;

    p = nullptr;//*delete不会改变指针的值,为了避免迷途指针,delete之后指针设定为nullptr
    delete p;//nullptr不会导致迷途指针
    //    delete free对于基本数据类型,释放两次都会出错,
    //    free 不改变指针的值,delete会改变,delete之后指针指向一个特定的位置
    
    int *p1((int *)malloc(4));
    cout<<" p1="<<p1<<endl;
    *p1=4;
    cout<<" p1="<<p1<<endl;
    free(p1);
    cout<<" p1="<<p1<<endl;

自定义类型myData

class mydata{
   
public://c++ class 默认private,如果都不写,系统会自动分配为两个public空的构造、析构函数
    void *p;
    mydata(){
   //构造
        p = malloc(1024*1024*100);
        cout<<"mydata create"<<endl;
    }
    ~mydata()//析构
    {
   
        free(p);
        cout<<"mydata delete"<<endl;
    }
};

//mydata d1;

void test(){
   
    mydata t1;
    
}

int main(){
   
    //    test();
    //mydata *p = (mydata *)malloc(sizeof(mydata));//malloc不调用构造函数
    mydata *p = new mydata;
    //free(p);//free不调用机构函数
    delete p;
}

new/delete单个对象以及数组注意事项

*对自定义类型需要严格配对 new []/ delete []或者new/delete。

	int *p = new int[3]{
   1,2,3};
	cout<<p<<endl;
	delete []p;//对于基本数据类型,效果一样,数组delete []p和delete p效果一样;
	//单个堆上的对象,调用delete []p会一直调用delete; 自定义类型数组,调用delete []会根据数组个数调用相应次数的析构函数, 调用delete则只调用一次。

new分配内存,静态区\栈\堆

char str[1024] = {
    0 };//内存全局静态区

int main(){
   
//    char str[1024] = { 0 };//栈区
//    char *str = new char[1024]{ 0 };//堆区
    int *p = new 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

群野

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值