您现在的位置是:主页 > news > 广告设计图片大全 图片素材/百度seo点击软件

广告设计图片大全 图片素材/百度seo点击软件

admin2025/5/18 17:42:57news

简介广告设计图片大全 图片素材,百度seo点击软件,技术支持 沧州网站建设,成都高级网站建设C中关于关键字new内存分配操作有三种形式,这三种形式各自有不同的功能:new expression、operator new和placement new;下面分别介绍; new expression new expression所谓的new表达式就是我们平常所见new,new expressio…

广告设计图片大全 图片素材,百度seo点击软件,技术支持 沧州网站建设,成都高级网站建设C中关于关键字new内存分配操作有三种形式,这三种形式各自有不同的功能:new expression、operator new和placement new;下面分别介绍; new expression new expression所谓的new表达式就是我们平常所见new,new expressio…

       C++中关于关键字new内存分配操作有三种形式,这三种形式各自有不同的功能:new expression、operator newplacement new;下面分别介绍;

new expression

    new expression所谓的new表达式就是我们平常所见new,new expression的操作包含两个步骤:

  1. 分配内存;
  2. 调用构造函数构造对象,必要时对其初始化;

  例如:

string * str = new string("ABC");
    这个语句的实现需经过以下两个步骤:(1)一般调用operator new分配足够的内存;(2)调用string类的构造函数构造对象,并对其初始化为ABC

operator new

         operator new平常叫做new操作符,该操作符仅仅完成内存的分配,并不对其构造对象或初始化;类似于C语言的malloc,只是负责内存申请。

     例如:

void *buffer = operator new (sizeof(string));

    这里只是申请内存,并没有构造对象或初始化。

placement new

       placement new是用来在指定的地址(已分配好的内存)上构造对象,并不对其分配内存;

    例如:

void *buffer = operator new (sizeof(string));
buffer = new (buffer) string("ABC");
    这里的语句,首先是先分配内存,然后使用 placement new在已分配好的内存上构造对象,并对其初始化。由placement new创建的对象,如果使用delete时,该对象对应的内存也被释放,所以,若你只想删除该对象不保存内存的话,就必要显示调用析构函数。
    谈到new时,这里也必须谈下delete的用法,但是delete只有两种形式:delete expression和operator delete

delete expression

     delete expression操作是与new expression相对应的,也就是我们常见的delete它也需要两个步骤来实现:

  1. 析构对象;
  2. 释放内存;
   例如:

string *str = new string("ABC");
delete str;
这里的 delete 执行的过程,首先是析构对象,再释放内存;

operator delete

      operator delete操作只是内存的释放,不够析构对象,类似于C语言的free操作

   例如:

void *buffer = operator new (sizeof(string));
operator delete (buffer);

    下面给出的是 C++ 库文件的一个例子

// new_op_new.cpp
// compile with: /EHsc
#include<new>
#include<iostream>using namespace std;class MyClass 
{
public: MyClass( ){cout << "Construction MyClass." << this << endl;};~MyClass( ){imember = 0; cout << "Destructing MyClass." << this << endl;};int imember;
};int main( ) 
{// The first form of new deleteMyClass* fPtr = new MyClass;delete fPtr;// The second form of new deleteMyClass* fPtr2 = new( nothrow ) MyClass;delete fPtr2;// The third form of new deletechar x[sizeof( MyClass )];MyClass* fPtr3 = new( &x[0] ) MyClass;fPtr3 -> ~MyClass();cout << "The address of x[0] is : " << ( void* )&x[0] << endl;
}