c++中new是什么意思

如 char *ch= new char[sizeof(str)] 中的new char[sizeof(str)]是什么意思

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

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-07-09
  new一般表示创建一个类的对象(实例),返回该类对象的指针。

  假设我们有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的构造函数。
第2个回答  推荐于2018-03-20
动态申请内存空间,那句话的意思就是申请一个大小与str字符串常量大小相同的字符数组。c++中new出来的要用delete删除。本回答被提问者和网友采纳
第3个回答  2012-04-14
在堆栈上动态创建一个存储空间
第4个回答  2012-04-14
动态分配内存
相似回答