Я считаю, что я нашел ошибку для существующего кода, но он действительно работает. Не могли бы вы помочь проверить правильность моего понимания?Родительский удержание указателя на дочерний элемент данных и использование функции члена данных в деструкторе
Речь идет о родительском классе, содержащем указатель объекта, который указывает на объект данных его дочернего класса. И в своем (родительском) деструкторе он использует указатель объекта для доступа к функции. Я верю, когда вызывается родительский деструктор, ребенок уже был разрушен, поэтому объект, указатель родительского указателя которого уже недействителен. Ниже приведен пример:
Мой вопрос для кода ниже состоит в том, что если родительский деструктор верен?
#include <iostream>
#include <string>
using namespace std;
class object {
public:
object(string na):name(na){}
string get_name(){
return name;
}
private:
string name;
};
class parent {
public:
~parent(){
cout<<"hello"<<endl;
cout<<mp->get_name(); **//!!!! (is this correct use mp here?)**
}
protected:
object* mp;
};
class child:public parent {
public:
child():m("hello"){
parent::mp=&m;
}
private:
object m;
};
int main()
{
child a;
return 0;
}
Неуловимый «это на самом деле работает» является одним из примеров неопределенного поведения. – molbdnilo