class Stack
{
private:
enum{MAX=10};
Item* pitems;
int size;
int top;
public:
Stack(int n=10);
Stack(const Stack & st);
Stack& operator=(const Stack & st);
~Stack();
...
};
Вопрос по конструктору копирования
Код:
Код:
...
Stack::Stack(const Stack &st)
{
//delete [] pitems; - суть вопроса
pitems=new Item [st.size];
size=st.size;
top=st.top;
for (int i=0; i<size; i++)
pitems=st.pitems;
}
Stack& Stack::operator =(const Stack &st)
{
if(this==&st) return *this;
delete [] pitems;
pitems=new Item [st.size];
size=st.size;
top=st.top;
for (int i=0; i<size; i++)
pitems=st.pitems;
return *this;
}
...
Stack::Stack(const Stack &st)
{
//delete [] pitems; - суть вопроса
pitems=new Item [st.size];
size=st.size;
top=st.top;
for (int i=0; i<size; i++)
pitems=st.pitems;
}
Stack& Stack::operator =(const Stack &st)
{
if(this==&st) return *this;
delete [] pitems;
pitems=new Item [st.size];
size=st.size;
top=st.top;
for (int i=0; i<size; i++)
pitems=st.pitems;
return *this;
}
...
так вот вопрос, подскажите пожалуйсто почему в конструкторе копирования я не имею права очистить память на которую указивает указатель pitems, мы же и так будем выделять новый блок памяти и тот на которий укззывает указатель pitems в даный момент будет утерена не так ли?? в книге етот нюанс не описан или я так читал :D, но етот нюанс хотелось бы понимать:confused:. Спасибо зарание! извините за ломаний руский :)
чото я переседел за компом слишком долго, дико извеняюсь , перенесите вопрос в С++ пожалйсто, ещо раз извеняюсь!!!!:(
А при перегрузке оператора присваивания Вы уже имеете дело с созданным объектом, поэтому pitem удаляется.
спасибо!!!, кажысь понял:)