C++中New的使用简介

(转自:https://blog.csdn.net/u012278016/article/details/79930924 )
C++中一提到new,至少可能代表以下三种含义:new operator、operator new、placement new

new operator(new expression)

当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:

  1. 获得一块内存空间
  2. 调用构造函数
  3. 返回正确的指针

假如我们定义了如下一个类A:

class A{
int i;
public:
  A(int _i) :i(_i*_i) {}
  void Say()  { printf("i=%dn", i); }
  };
//调用new:
A* pa = new A(3);

那么上述动态创建一个对象的过程大致相当于以下三句话(只是大致上):

A* pa = (A*)malloc(sizeof(A));
pa->A::A(3);
return pa;

operator new

new的第二种形态——operator new,new operator的第一步分配内存实际上是通过调用operator new来完成的,这里的new实际上是像加减乘除一样的操作符,因此也是可以重载的。operator new默认情况下首先调用分配内存的代码,尝试得到一段堆上的空间,如果成功就返回,如果失败,则转而去调用一个new_hander,然后继续重复前面过程。

placement new

new的第三种形态——placement new,new operator的第二部定位构造实际上是通过调用placement new来完成的,也就是在取得了一块可以容纳指定类型对象的内存后,在这块内存上构造一个对象。

对头文件或<new.h>的引用是必须的,这样才可以使用placement new。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值