c++ new的使用

1. 针对现有内存使用new申请内存

class Student
{
public:
    Student(int x = 0){x_ = x};
    ~Student(){};
private:
    int x_;
};



int main()
{  

char s[100];//此处为栈内存,

new(s)Student(2);//从数组s的首地址开始申请一个结构体所需内存 (此函数为调用Student的构造函数, 参数为2)


char *ptr = new ptr[100];

new(ptr + 4)Student;// 从指针ptr的第四个字节开始申请一个结构体所需内存(此函数为调用Student的构造函数, 无参)

return 0;

}

2. 申请内存失败的处理

new和malloc的不同之初是, C标准的malloc在申请内存失败时会直接返回NULL, 而new在失败时并不会返回空指针, 而是直接抛出异常

例子:char *ptr = new ptr[100];

①直接判断:

if (!ptr){...}//错误的做法, 因为new成功时返回指针判断无效, 失败时直接抛出异常, 判断仍然无效;

②捕获异常

try
        {
            char *ptr = (char *)new char[
100];
        }
        catch (const std::bad_alloc& e) 
        {
            std::cout << __FUNCTION__  << " : " << e.what() << '\n';
           
return -1;
        }

③取消异常


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值