1.1 new关键字及内存泄漏

new关键字是C++用来动态分配内存的主要方式。

代码演示:

new可以直接分配单个变量的内存,也可以分配数组。

在分配单个对象的内存时:

当对象是普通变量时,可以分配对应的内存

#include<iostream>

int main(){
    int* pi = new int(100);
    std::cout << *pi << std::endl;
    return 0;
}

当对象是类对象时,会调用构造函数,如果没有对应的构造函数,就会报错。

#include<iostream>

int main(){
    std::string* pString = new std::string("hello world");
    std::cout << *pString << std::endl;
    return 0;
}

注意:New出来的对象,必须delete释放。

在分配数组对象内存时:

对于普通变量:可以使用"()"将所有对象全部初始化为0。

#include<iostream>

int main(){
    int* pi = new int(100)();
    std::cout << pi[20] << std::endl;
    
    delete[] pi;
    return 0;
}

注意:若没有(),pi分配的内存就成为未定义的了,没有人知道值是多少,当然从汇编角度是可以知道的。

对于类对象,有没有"()"都一样,均使用默认构造函数,如果没有默认构造函数就会报错。

#include<iostream>

class Test{
public:
    Test(int i_):i(i_){}
private:
    int i;
};

int main(){
    Test* pTest = new Test[100];
    return 0;
}

2.内存泄露介绍:内存泄露是经常出现的常见bug。

内存泄露会导致堆内存的逐渐被占用,最终内存用完程序崩溃。常见的情况就是项目测试没问题,上线几天就炸了。然后就会非常麻烦,排查困难,损失很大。

内存泄露是最严重的错误之一,程序不怕报错,就怕一开始运行的好好的,突然就出现了莫名其妙的错误。

这句话也引出了后面的两个部分:
智能指针可以非常好的避免内存泄露的问题。
异常处理部分可以恰当的处理程序出现的异常,让程序有错误就立马处理,或直接终止进程,或忽略,不要让异常莫名其妙。这是程序设计的重要理念。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值