为了账号安全,请及时绑定邮箱和手机立即绑定

new和delete使用?

new和delete使用?

小怪兽爱吃肉 2019-02-14 10:06:43
#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的显式调用多的步骤所需要的代码贴出来看看?
查看完整描述

2 回答

?
撒科打诨

TA贡献1934条经验 获得超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方法就会产生一些似乎多余的代码)。



查看完整回答
反对 回复 2019-03-20
  • 2 回答
  • 0 关注
  • 666 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信