new和delete使用?

#include <new> 
using namespace std; 
int main() 

int* p=new int; //A 
int* q=(int*)operator new(sizeof(int));//B 

delete q; 
operator delete(p); 
return 0; 

A和B都是调用<new>里声明的操作符 
__bcount(_Size) void *__CRTDECL operator new(size_t _Size) _THROW1(std::bad_alloc);来在堆上分配空间的,
谁能把A的隐式调用比B的显式调用多的步骤所需要的代码贴出来看看?

小怪兽爱吃肉
浏览 667回答 2
2回答

撒科打诨

A如果是内置类型的话和B差别不大,B你可以把它看作是C的malloc函数和free函数的功能,和他们所实现的功能其实基本相同。如果A是为对象分配内存的话,它在做完了B的工作后,还会调用该对象对应的构造函数,在delete时,同样调用对象的析构函数。#include <iostream>#include <new>using namespace std;class foo{public:int a;foo(){cout << "constructor taking process ...\n";a = 2007;}};int main(){foo* p1 = new foo;foo* p2 = (foo*)operator new(sizeof(foo));cout << p1->a << endl;cout << p2->a << endl;delete p1;operator delete(p2);}再不行去看debug时的汇编代码,但这也因编译器和代码的发行版本而异(比如vc8的debug下A方法就会产生一些似乎多余的代码)。
打开App,查看更多内容
随时随地看视频慕课网APP