#include<iostream>
#include<stdlib.h>
using namespace std;
class Test
{
public:
Test()
{
cout<<"constructor called"<<endl;`
}
~Test()
{
cout<<"Destructor called"<<endl;
}
};
int main()
{
///constructor called
Test *t=new Test();
free(t);
Test *t2=(Test*)malloc(sizeof(Test));
///destructor getting called
delete t2;
getchar();
return 0;
}
答案 0 :(得分:3)
delete t2
的语义是调用析构函数然后释放空格。
此处您的代码具有未定义的行为,因为您无法使用free
函数释放new
分配的空间。您既不能使用delete
关键字来释放malloc
分配的空间。
答案 1 :(得分:1)
代码甚至无法编译: malloc返回指向已分配内存的指针,因此不是:
Test t2=(Test)malloc(sizeof(Test));
你需要做
Test * t2=(Test*)malloc(sizeof(Test));
malloc在c中,delete在C ++中。
'malloc'/'calloc''免费'之后。 'free'只释放记忆。
'新'后'删除'。 'delete'调用析构函数然后释放内存。