深入解读c++ new, delete,::operator new ::operator delete,placement new实现机制


前言

本文从c++new操作 实现原理入手,深入解读new ,operator new ,placement new,并配有相关的代码例程。


一、当我们new时,到底做了什么

对于new,熟悉c++的小伙伴绝对不陌生,一般我们需要什么对象直接new一下,然后用完之后记得要delete。简单方便,但是我们真的知道new做了什么吗?new又和operator new, placement new这些乱七八糟的又有什么关系的?
事实上,new主要做了两件事情:
1 new分配内存并且返回指向该内存块的指针
2 在该指针指向处调用对应的构造函数构造对象

只不过这些过程我们是看不到的,我们能看到的只是new,剩下的工作是由编译器在背后默默的替我们做了。(所以哪有什么岁月静好,只不过有人替我们负重前行哈哈哈)
如果我们来模拟一下new到底做了什么的话,应该是像下面这个样子:(我的环境是vs2017,在msvc系列编译器是可以这样调用的,在gnu系列的编译器下是会报错的,比如在devc++就会报错)

class A
{
   
public:

	A() :i(0) {
    cout << "constructor:" << this << "  i" << i << endl; }
	A(int x) :i(x)  {
   cout << "constructor:" << this << "  i" << i << endl;}
	~A(){
    cout << "deconstructor:" << this << endl; }
private:
	size_t i;
};
int main()
{
   
	A* pa = (A*)malloc(sizeof(A));
	pa->A::A(1);  // 指向A的指针调用A的构造函数(gnu编译器下编译不通过)
	pa->A::~A<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值