C++中new三种用法

  1. new operator(new的表达式):string *str = new string("abcde") 既分配内存也初始化对象
  2. operator new(new的操作符):void *buff = operator new(sizeof(string))  类似于malloc 只分配空间不进行初始化
  3. placement new:void *buff = operator new(sizeof(string)); buff = new(buff) string("abcde"); 对现有的buff空间进行初始化string类型的对象。

网易笔试题目:

C++中的new操作符通常完成两个工作,分配内存及其调用相应的构造函数初始化
请问:
1) 如何让new操作符不分配内存,只调用构造函数?
2) 这样的用法有什么用?

  1. 使用定位放置new   
  2. #include <new> // 必须 #include 这个,才能使用 "placement new"  
  3. #include "Fred.h" // class Fred 的声明  
  4. void someCode()  
  5. {  
  6. char memory[sizeof(Fred)]; // Line #1  
  7. void* place = memory; // Line #2  
  8. Fred* f = new(place) Fred(); // Line #3 (详见以下的“危险”)  
  9. // The pointers f and place will be equal  
  10. // ...  
  11. }   
  12. 作用为:对于需要反复创建并删除的对象,可以降低分配释放内存的性能消耗  
placement new的作用就是:创建对象但是不分配内存,而是在已有的内存块上面创建对象。用于需要反复创建并删除的对象上,可以降低分配释放内存的性能消耗。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值