C++ new 和 delete
2020-12-13 05:42
标签:清除 null amp style 析构 空间 调用 重载 初始 string *ps = new string(“Memory Management”); 这里的new是由语言内建的,我们成为new关键字。new操作符做了两件事情: 1、在堆上分配足够的内存,用来放置某类型的对象;使用operator new进行内存空间分配。 2、调用constructor构造函数,为刚刚分配的内存空间设置初值。 new操作符的行为是语言内建的,无法对其行为进行改变。 声明如下: void * operator new(size_t size);//是不是很像C中的malloc。 是的,我们可以将operator new函数类比于C中的malloc函数。 operator new只做了一件事情,就是分配内存空间,但是没有构造函数,也就是没有完成对分配空间的初始值设定。但是operator new可以重载。 所以在使用operator new之后一般接下来会对分配的内存空间进行初值设定。 char *memory = (char*) operator new(sizeof(char)*15);//类似于malloc strcpy(memory, “hello world”); new (buffer) type(size_t size); int data = 123456; int *pa = new(&data) int;//pa指针将指向data对象,里面的内容与data保持一致,没有进行覆盖。 int *pb = new(&data) int(123);//pb指针同样指向data对象,里面的内容将用123进行覆盖。 delete p;//or delete [] p; 调用delete后,只是告诉了系统被delete掉的地址空间可以进行重新分配了。但是并未将p中的地址清除,也就是在delete后使用*p还是能够得到内容,但是其中的内容就不可以预测了,可能系统重新将之前的内存空间分配出去,并设置了其他的值。所以在delete之后我们一般会将对应的delete对象设置为null。 delete p; p = null; p->~string(); operator delete(p); 最后一步也是讲p重置为null,不过这步可以在析构函数中完成。 C++ new 和 delete 标签:清除 null amp style 析构 空间 调用 重载 初始 原文地址:https://www.cnblogs.com/zhousong918/p/11146769.htmll new操作符(new operator)
l new函数(operator new)
l Placement new:在已分配的内存(堆和栈)中构造对象
l delete释放内存,调用类的析构函数
l delete函数(operator delete)
上一篇:C++中内联函数的用法
下一篇:JSONHelper