0

这是我的类定义,仅从更大的程序中复制构造函数。当我的析构函数执行时,它会自动释放“coeff”内存吗?我相信确实如此,但是,我的程序在程序完成后会引发 _CrtIsValidHeapPointer(pUserData) 错误。

class Poly
{
private:
int order; //order of the polynomial
int size; //order + 1
int * coeff;//pointer to array of coeff on the heap

public:
Poly();
Poly(int Order);
Poly(int Order, int * Coeff);
~Poly(){cout << "Destructor\n";};
Poly(const Poly &rhs);

//accessors &  mutators
void set();
void set(int * Coeff, int Order);
int getorder(){return order;};
int * get()const{return coeff;};

//Overloaded Operators
Poly operator+(const Poly &rhs);
Poly operator-(const Poly &rhs);
Poly operator*(const int scale);
Poly operator=(const Poly &rhs);
Poly operator*(const Poly &rhs);
const int& operator[](int I)const;
int& operator[](int I);
bool operator==(const Poly &rhs);
int operator( )(int X);
friend ostream & operator<<(ostream & Out, const Poly &rhs);
friend istream & operator >>(istream & In, Poly &rhs);
};

Poly::Poly(const Poly &rhs)
{
order = rhs.order;
size = rhs.size;
int *coeff = new int[size];
for(int i(0); i <= order; i++)
    coeff[i] = rhs.coeff[i];
}

谢谢

4

3 回答 3

1

析构函数只会cout << "Destructor\n". 它不会释放任何内存。

于 2013-11-10T22:09:46.843 回答
1

析构函数负责处理构造函数自动分配的任何内存,它不会再做任何事情。因此,如果您自己分配内存(例如使用 时new),析构函数将离开它。如果它的行为不同,它可能会破坏您在程序的不同位置使用的数据。这就是为什么它不适用于您使用ordelete创建的变量。newnew[]

检查您的 IDE 文档,因为它可以具有在程序关闭后清除所有数据的清理机制,并且可以将该机制自动嵌入到您的输出代码中。

于 2013-11-10T22:14:35.997 回答
0

析构函数将作为您的代码执行,仅此而已。您的析构函数只是打印一条消息。试试下面的代码:

~Poly() {
    delete [] coeff; // if you allocated memory by new in constructor!
}

作为提示,尽量不要使用裸指针。总有std::vector,,, std::unique_ptr...

于 2013-11-10T22:19:51.633 回答