C++定位new(placement new)

C++定位new(placement new)

普通new是在堆上申请一块内存空间,交由用户自己管理
定位new则是在用户已经申请好的一块空间重复使用,这个空间可以是栈上的也可以是堆上的
1、若是在堆上使用定位new,那么还是需要用户对内存自行管理,避免内存泄漏
2、若是在栈上使用定位new,则无需用户进行管理,系统会对栈上空间自动回收

格式

char buffer[1024]={0};
new (pointer) Type(arguments);// char *p = new(buffer)char[10];
*

cpp 复制代码
#include<iostream>
#include<Windows.h>
using namespace std;

int main()
{
	char t_str_buffer[1024] = {0};
	char*p = new(t_str_buffer)char[10];
	char*p1 = new(t_str_buffer+10)char[10];
	cout<<(void*)t_str_buffer<<endl<<(void*)p<<endl<<(void*)p1<<endl;
	cout<<"----------------------------"<<endl;

	char *t_str_newbuffer = new char[1024];
	char*p2 = new(t_str_newbuffer)char[10];
	cout<<(void*)t_str_newbuffer<<endl<<(void*)p2<<endl;
	return 0;
}
相关推荐
今儿敲了吗3 分钟前
10| 扫雷
c++·笔记·学习
zhougl99615 分钟前
Java内部类详解
java·开发语言
Grassto16 分钟前
11 Go Module 缓存机制详解
开发语言·缓存·golang·go·go module
代码游侠25 分钟前
学习笔记——Linux内核与嵌入式开发3
开发语言·arm开发·c++·学习
怎么没有名字注册了啊38 分钟前
C++ 进制转换
开发语言·c++
代码游侠42 分钟前
C语言核心概念复习(二)
c语言·开发语言·数据结构·笔记·学习·算法
冰暮流星44 分钟前
javascript之双重循环
开发语言·前端·javascript
金枪不摆鳍1 小时前
C++常用关键字考察
c++
墨月白1 小时前
[QT]QProcess的相关使用
android·开发语言·qt
小小码农Come on1 小时前
QT信号槽机制原理
开发语言·qt