为什么析构函数会被调用,即使我使用malloca分配了内存?

时间:2016-09-11 18:21:55

标签: c++

#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;
}

2 个答案:

答案 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'调用析构函数然后释放内存。