现在的 C++ 中, New 有三种典型的使用方法, 对应于下面三种格式.
1.new : 普通的 new 操作, 一旦内存分配失败, 直接抛出一个异常, 需要用 catch 来处理这种异常信息.
2. new(nothrow) : 不抛出异常的 new 操作, 一旦内存分配失败, 禁止抛出异常, 而是返回一个 NULL, 可以通过判断指针是不是 NULL 来处理这种异常.
3. placement new : 直接复用已经分配好内存的指针的 new 操作, 该操作只是会调用构造函数, 将这部分内存重新做初始化操作.
例子如下所示:
函数 Func1() 里面的 a==NULL 可以捕获内存分配失败的场景.
函数 Func2(), a==NULL 并不能起到保护内存分配失败的场景, 需要用 catch 来处理.
函数 Func3(),placement new 操作之后, b 的地址与 a 的地址是一致的, 只不过 b 重新做了这部分内存的初始化操作.
程序运行结果如下所示:
从打印可以看出 a 和 b 指向的地址是一致的, 并且这个 a_从 5 变成了 8, 如下图所示:
灰子作于二零一八年十二月十九日.
[原创作品, 欢迎分享, 请勿转载!! 谢谢尊重!!!]
来源: http://www.jianshu.com/p/9b57e769c3cb