检查析构函数是否正在破坏所有动态内存?

时间:2018-03-28 20:36:59

标签: c++

在c ++中是否有任何方法可以检查在调用析构函数后是否删除了动态分配的内存?就我而言,在对象之后无法访问内存。那么我该如何检查内存是否从可用空间中删除 例如:

//main file
#include <iostream>
#include "kake.h"

using namespace std;

void test() {
    Kake kjeks(2);
    Kake cookie(kjeks);
    cookie = kjeks;
    cout << kjeks.getDynMem() << endl;
    cout << cookie.getDynMem() << endl;
}


int main() {
    test();
    //Is the memory gone?
    return 0;
}

//Kake class declaration
class Kake {
public:
    Kake();
    Kake(int ant);
    ~Kake();
    Kake(const Kake& rhs);
    Kake& operator=(const Kake& rhs);

    int getAntall()const { return antall; }
    int getDynMem() const { return *dynMem; }
    int * getDynAddr() const { return dynMem; }

private:
    int antall;
    int *dynMem;
};

//Kake implementation
#include "kake.h"
#include <iostream>

using namespace std;

Kake::Kake():antall(0){}
Kake::Kake(int ant):antall(ant){
    dynMem = new int;
    *dynMem = 2;
}
Kake::~Kake(){
    delete[] dynMem;
}
Kake::Kake(const Kake& rhs):antall(rhs.antall){
    dynMem = new int(rhs.getDynMem());

}
Kake& Kake::operator=(const Kake& rhs){
    dynMem = new int;
    *dynMem = rhs.getDynMem();
    antall = rhs.antall;

    return *this;
}

1 个答案:

答案 0 :(得分:0)

执行此操作的一个有用工具是valgrind。 Valgrind是一个非常有用的检查内存泄漏的工具。

执行类似

的操作
valgrind --tool=memcheck your_program_name

这将运行您的程序,您将能够将内存分配数与已释放的内存数进行比较。这将使您了解是否泄漏内存