0
Привет ребята Мой код:сбой программы при удалении указатель
class aClass
{
public:
int data;
aClass* pointer=NULL;
aClass(int x): data(x) {
cout << "calling int constructor\n";
}
~aClass() {
delete pointer;
cout <<"Index " <<this->data<<" calling destructor\n";
}
};
int main()
{
aClass ob1(1);
ob1.pointer=new aClass(2); // let's say the new object is called ob2
ob1.pointer->pointer=new aClass(3);// let's say the new object is called ob3
delete ob1.pointer; //destory ob2, which will destory ob3 in sequentially.
return 0;
}
Я ожидал, что выход будет так:
calling int constructor
calling int constructor
calling int constructor
Index 2 calling destructor
Index 3 calling destructor //I think when ob2is destoyed ob3 will be destoyed
//too, but this is not in the output even though I delete "delete pointer" in
//the destructor
Index 1 calling destructor
Но программа разбился, я знаю его «удалить указатель «в деструкторе, который разбил программу, но я понятия не имею, почему он разбился и почему ob3 не уничтожен?
Спасибо за ваш ответ, но я до сих пор не понимаю, выглядит, как я понял некоторые основные части Int основных() { aClass ob1 (1). ob1.pointer = new aClass (2); ob1.pointer-> pointer = new aClass (3); удалить ob1.pointer; // ob1 все еще существует в области здесь ob1.pointer = NULL; // почему эта точка должна быть установлена как NULL, поскольку функция int // еще не закончила return 0; } – whoisit
@whoisit Если вы скажете мне, что именно вы не понимаете, я могу попытаться помочь. Я бы рекомендовал читать деструкторы, области и указатели. –
int main() { aClass ob1 (1); // Этап 1 ob1.pointer = new aClass (2); // Этап 2 ob1.pointer-> pointer = new aClass (3); // // Этап 3 delete ob1.pointer; // Этап 4 return 0; // stage 5 } Из моего понимания, что, когда начинается основное, последовательность выполнения - это этап 1 - этап 5, затем основное завершается и начинает очищать память. Итак, ob1 существует с этапа 1 до стадии 5, как его указатель был удален дважды? – whoisit