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;
}
③取消异常