c++中new是什么意思
C++中new运算符用于动态分配和撤销内存的运算符。
new运算符使用的一般格式为new 类型 [初值]。
用new分配数组空间时不能指定初值。如果由于内存不足等原因而无法正常分配空间,则new会返回一个空指针NULL,用户可以根据该指针的值判断分配空间是否成功。
一般来说,使用new申请空间时,是从系统的“堆”(heap)中分配空间。申请所得的空间的位置时根据当时的内存的实际使用情况决定的。但是,在某些特殊情况下,可能需要在程序员指定的特定内存创建对象,这就是所谓的“定位放置new”(placement new)操作。
扩展资料:
1、用定位放置new操作,既可以在栈(stack)上生成对象,也可以在堆(heap)上生成对象。如本例就是在栈上生成一个对象。
2、使用语句A* p=new (mem) A;定位生成对象时,指针p和数组名mem指向同一片存储区。所以,与其说定位放置new操作是申请空间,还不如说是利用已经请好的空间,真正的申请空间的工作是在此之前完成的。
3、使用语句A *p=new (mem) A;定位生成对象是,会自动调用类A的构造函数,但是由于对象的空间不会自动释放(对象实际上是借用别人的空间),所以必须显示的调用类的析构函数,如本例中的p->~A()。
4、万不得已才使用placement new,只有当你真的在意对象在内存中的特定位置时才使用它。例如,你的硬件有一个内存映像的I/O记时器设备,并且你想放置一个Clock对象在哪那个位置。
参考资料:百度百科-new
推荐于2016-07-09 · 知道合伙人软件行家
知道合伙人软件行家
向TA提问 私信TA
假设我们有class C{}; 要创建一个C类的对象(实例),主要有两种方式。一个是用 C obj; 直接定义。这种方式定义的对象内存是在栈上(静态内存)分配的。另一种方式是定义一个类的指针然后用new来创建该对象并返回需要的指针地址。这种方式是用 C* obj = new C(); 此方式分配的内存是在堆上。
堆和栈的区别请参考:
http://zhidao.baidu.com/link?url=Ht_4FBs3thaAo_zb_2Ne4_a8AM8mZtyGKAJPYuXQolu-xBp4LMielDR3AnhJoJPR84TUzaCwZYcxDzEMX0xkIa
另外,new C()会调用C类的无参构造函数。通过new C(...)传入不同的参数可以调用对应的C的构造函数。