У меня есть структура наследования родитель-ребенок.У меня есть объект, который был создан (новый) родительским классом.Я хочу перевести этот объект в дочерний класс.Мне нужна автоматическая процедура, такая как приведение, потому что родительский класс имеет много свойств, и копирование родительских свойств в дочернем объекте невозможно.
Я могу привести родительский объект к дочернему объекту с помощью оператора reinterpret_cast, чтобы у меня были значения родительских свойств вМой дочерний объект, но я столкнулся с другой проблемой.
После того, как вы присвоите память одной из специфических дочерних переменных, когда вы захотите удалить дочерний объект, вы столкнетесь с ошибкой сегментации памяти.кажется, куча была повреждена.
мой код похож на это:
class parentclass
{
public:
int parent_var = 10;
parentclass()
{
parent_var = 20;
}
};
class childclass :parentclass
{
public:
int* child_var;
childclass()
{
child_var = NULL;
}
};
void main()
{
parentclass* pobj = new parentclass();
childclass* cobj;
cobj = reinterpret_cast<childclass*>(pobj);
//everything is ok, cobj.parent_var has correct value (=20)
//and child specific variables are filled with random variables.
delete cobj;
// cobj delete successfully
parentclass* pobj2 = new parentclass();
childclass* cobj2;
cobj2 = reinterpret_cast<childclass*>(pobj2);
//everything is ok and
//cobj2.parent_var has correct value
cobj2->child_var = new int[10]; // assign memory to child specific variable
delete cobj2; // Here Heap corruption Error occurred.
}
Я читаю похожие страницы в stackoverflow, но большинство из них описывают приведение, когда объект новый с дочерним классом.Ваша помощь приветствуется.