类构造函数中的新功能会发生什么?

时间:2013-11-10 22:08:25

标签: c++ constructor new-operator

这是我的类定义,只是来自较大程序的复制构造函数。当我的析构函数执行时,它会自动释放'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];
}

由于

3 个答案:

答案 0 :(得分:1)

析构函数只会cout << "Destructor\n"。它不会释放任何记忆。

答案 1 :(得分:1)

析构函数负责构造函数自动分配的任何内存,它不再执行任何操作。因此,如果您自己分配内存(就像使用new时那样),析构函数将离开它。如果它的行为不同,它可能会破坏您在程序的不同位置使用的数据。这就是为什么它对您使用deletenew创建的变量不new[]

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

答案 2 :(得分:0)

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

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

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