考虑下面的代码,如果我使用Die
类的实例,这样会发生什么:此代码是否会导致内存泄漏问题?
Die d;
d.Roll(20);
d.Roll(15);
d.Roll(30);
我应该或者我应该不会再alocating内存之前,释放由值所占用的内存? delete[ ]
之前new
?
die.h
#ifndef DIE_H
#define DIE_H
#include<iostream>
#include<time.h>
using namespace std;
class Die
{
private:
int number;
int* values;
int count;
void roll();
public:
Die(){srand(static_cast<int>(time(NULL)));number=0;values=NULL;count=0;}
void Roll(int n);
int getNumber()const{return number;}
void printLastValue();
void printValues();
~Die(){delete [] values;}
};
#endif
die.cpp
#include"die.h"
#include<iostream>
#include<time.h>
using namespace std;
void Die::roll()
{
number=1+rand()%6;
}
void Die::printLastValue()
{
cout<<number<<endl;
}
void Die::Roll(int n)
{
count=n;
values=new int[count];
for(int i=0;i<count;i++)
{
roll();
values[i]=number;
}
}
void Die::printValues()
{
for(int i=0;i<count;i++)
{
cout<<values[i]<<endl;
}
}
的main.cpp
#include"die.h"
#include<iostream>
using namespace std;
int main()
{
Die d;
d.Roll(25);
d.printValues();
d.Roll(40);
d.printValues();
d.Roll(100);
d.printValues();
d.printLastValue();
}
根据定义,您的程序会泄漏内存,除非您在运行时**在每次调用'new'时调用'delete'(或'delete []'调用数组)。你的运行时可以调用连续的'new'调用,覆盖相同的目标变量,而不需要中间的'delete []',所以是的,这就像泰坦尼克号一样泄漏。 – WhozCraig
帮你一个忙,烧你的书(或者你正在学习“C++”)和[得到一个体面的](http://stackoverflow.com/questions/388242/)。 – fredoverflow
与此问题无关,但您应该查看使用构造函数[初始化程序列表](http://www.learncpp.com/cpp-tutorial/101-constructor-initialization-lists/)而不是将所有这些值设置为构造函数的主体。它是Scott Meyers改进C++程序的55种方法之一(它是Effective C++中第4项的一部分) – pstrjds