前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++ 06 - new

C++ 06 - new

作者头像
Reck Zhang
发布2021-08-11 11:52:27
3370
发布2021-08-11 11:52:27
举报
文章被收录于专栏:Reck Zhang

new

关于c++中的new, 主要分为operator newnew operator.

new operator

new operator就是标准new:

  1. 调用new从堆中找到合适的内存空间进行分配, 同时调用构造函数.
  2. 不允许被重载.

operator new

operator new是函数:

  1. 只分配内存空间, 不调用构造函数, 当没有满足的空间进行分配时, 调用new_handler(), 如果new_handler()没有定义, 执行bad_alloc异常.
  2. 可以被重载.
  3. 重载时返回类型需要是void*, 表示分配的地址. 第一个参数类型是size_t, 表示申请空间大小, 可以带其他参数.
  4. 值得注意的是, 虽然重载的operator new不会调用构造函数, 但是当operator new return的时候, 编译器会自动调用对象的构造函数.

placement new

placement new是重载operator new的一个标准, 全局的版本, 不能被自定义版本代替.

代码语言:javascript
复制
void* operator new(size_t, void* pointer) {
    return pointer;
}

placement new的执行忽略了size_t参数, 只返还第二个参数, 其结果是允许用户把申请的对象放在一个指定的内存空间, 用法如下:

代码语言:javascript
复制
auto buffer_add = malloc(sizeof(Foo) + sizeof(int));
auto foo = new(buffer_add) Foo;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-01-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • new
    • new operator
      • operator new
        • placement new
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档