c++ new的使用

来源:互联网 发布:php文件管理系统 编辑:程序博客网 时间:2024/06/05 01:04

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;
        }

③取消异常


0 0
原创粉丝点击