C++中placement new的用法
使用placement new可以在指定的已经申请好的内存位置创建实例,这样就可以不用重新申请内存,而只是调用构造函数就可以,这个内存位置甚至可以是在栈上,一般会在进程间通信的共享内存方案中使用。
示例一
//main.cpp
#include<iostream>
#include<malloc.h>
class Demo
{
public:
Demo() = default;
~Demo() = default;
private:
int m_data;
};
int main()
{
auto buf = malloc(1024);
memset(buf, 0, 1024);
auto demo = new (buf) Demo;
//delete demo;
demo->~Demo();
//注意不要调delete释放,显式调用析构释放就可以了,试一下就知道是为啥了
free(buf);//提醒一下这里析构不会自动调的
return 0;
}
示例二
//main.cpp
#include<iostream>
#include<malloc.h>
class Demo
{
public:
Demo() = default;
~Demo() = default;
private:
int m_data;
};
int main()
{
char buf[16] = { 0 };
auto demo = new (buf) Demo;
//delete demo;
demo->~Demo();
//注意不要调delete释放,显式调用析构释放就可以了,提醒一下这里析构不会自动调的(虽然是在栈上)
return 0;
}