C++ 语句 delete new CTest();是什么意思?

bandaoyu 2020-08-13 04:23:25
在这个文章《C++几种内存分配方法的效率测试与比较》:https://blog.csdn.net/hard_cold/article/details/17538561
里面看到的,代码附在最后,有两句比较懵圈:


delete new CTest();
new(pTest + i * len) CTest;


第一句是什么意思?等同 new CTest(); delete CTest;
第二句又是什么意思? 只见过 new CTest,没见过 new(参数) CTest 这样的



#include <iostream>
#include <time.h>
#include <vector>
using namespace std;

#define MAX_CYCLE 30000000

class CTest
{
private:
//int ID;
//int ID2;
//double ID3;
char a[3];
};

inline void use_new()
{
for(int i = 0; i < MAX_CYCLE; i++)
delete new CTest();
}

inline void use_pool()
{
CTest* pTest = new CTest[MAX_CYCLE];
int len = sizeof(CTest);
memset(pTest, 0, MAX_CYCLE * len);
for(int i = 0; i < MAX_CYCLE; i++)
new(pTest + i * len) CTest;
delete [] pTest;
}

inline void use_vector()
{
vector<CTest> testVec(MAX_CYCLE);
}

int main()
{
time_t timer1, timer2;

time(&timer1);
//use_new();
time(&timer2);
cout<< difftime(timer2, timer1)<<endl;

time(&timer1);
//use_pool();
time(&timer2);
cout<< difftime(timer2, timer1)<<endl;

time(&timer1);
use_vector();
time(&timer2);
cout<< difftime(timer2, timer1)<<endl;

system("pause");
return 0;
}



...全文
658 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
SuperLy 2020-08-20
  • 打赏
  • 举报
回复
先new紧接着delete; 但说不定有这种需求,在构造函数里面完成某些功能,然后自动释放。
yshuise 2020-08-15
  • 打赏
  • 举报
回复
new(pTest + i * len) CTest; ============== 这个称为定位new,就是指在pTest + i * len这个地址上构造一个CTest对象
yshuise 2020-08-15
  • 打赏
  • 举报
回复
垃圾代码
alittlenewbiek 2020-08-13
  • 打赏
  • 举报
回复
1. new和delete都可以当作operator,优先级相同,结合律自右向左;
所以,确实相当于先new再delete。

2. 有一种叫作placement new,在已经分配好的内存上构造对象,用法
new(*address) initializer
placement new用来实现内存池的概念,正如同代码里pool的含义。
好处就是省去了分配内存带来的开销。

64,687

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧