您现在的位置是:主页 > news > 广告设计图片大全 图片素材/百度seo点击软件
广告设计图片大全 图片素材/百度seo点击软件
admin2025/5/18 17:42:57【news】
简介广告设计图片大全 图片素材,百度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…
这里只是申请内存,并没有构造对象或初始化。
谈到new时,这里也必须谈下delete的用法,但是delete只有两种形式:delete expression和operator delete
下面给出的是 C++ 库文件的一个例子 :
C++中关于关键字new内存分配操作有三种形式,这三种形式各自有不同的功能:new expression、operator new和placement new;下面分别介绍;
new expression
new expression所谓的new表达式就是我们平常所见new,new expression的操作包含两个步骤:- 分配内存;
- 调用构造函数构造对象,必要时对其初始化;
例如:
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,它也需要两个步骤来实现:
- 析构对象;
- 释放内存;
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;
}