编写C ++析构函数

时间:2016-06-28 19:14:54

标签: c++ destructor

如果我定义了一个自定义析构函数,我是否必须手动删除每个变量?

malloc分配的内存在析构函数中应为free d。指向由mallocint分配的内存的指针怎么样? A.H:

#ifndef A_H
#define A_H
#include <stdlib.h>
#include <iostream>
#include <stdint.h>
using namespace std;

class A{
    public:
    uint32_t  x;
    uint32_t* ar_y;
    A(void);
    ~A(void);
};
#endif

a.cpp:

#include "a.h"
A::A(void){
    x = 0;
    ar_y = (uint32_t*)(malloc(4));
}
A::~A(void){
    // free the memory allocated by malloc
    free(ar_y);
    //Is it ok to do nothing for int* y and int x?
}

TEST.CPP:

#include "a.h"
int f(void){
    A objA;
    //cout << objA.x << endl;
    //Upon exiting the function
    //destructor of A is called.
}
int main(void){
    uint32_t i;
    // see if memory usage go crazy.
    for (i = 0; i < 10000000000; i++) f();
}

测试结果:

内存使用率并没有疯狂上升。

1 个答案:

答案 0 :(得分:3)

您不需要为x做任何事情。您需要注意释放ar_y指向的内存。

有关在为类中的成员变量分配内存时需要执行的操作的详细信息,请参阅What is The Rule of Three?

由于你在C ++领域,更喜欢使用newdelete运算符,而不是使用mallocfree