Я новичок в C++ и изучаю виртуальные функции и узнал, что мы должны писать виртуальный деструктор, если класс имеет виртуальные функции, а класс имеет элементы указателя. Ниже мой код, и я с помощью виртуальной студии 2013RCОтладка Утверждение Сбой при попытке удалить char *
#include<iostream>
using namespace std;
//base and derived class with virtual function
class Parent{
protected:
const char *name;
public:
virtual void say(){ cout << "1" << endl; }
virtual void showName(){ cout << name << endl; }
Parent(){};
Parent(const char *myName) :name(myName){};
virtual ~Parent(){ delete name; cout << "Parent name deleted" << endl; }
};
class Child :public Parent{
protected:
const char *name;
public:
virtual void say(){ cout << "2" << endl; }
virtual void showName(){ cout << name << endl; }
Child(){};
Child(const char *myName) :name(myName){};
virtual ~Child(){ delete name; cout << "Child name deleted" << endl;}
};
int main(){
Child a("Tom");
return 0;
}
Или
int main(){
Parent *a = new Child("Tom");
delete a;
return 0;
}
Оба будут давать окна об ошибках Debug утверждения Failed.
Для этого случая, как правильно записать виртуальный деструктор?
Большое спасибо
Thanks @Vladp. Я прочитал приведенный ниже код из книги 'int foo = 10; int * ptr = foo; delete ptr; ' Кажется, что это тоже не работает ... – cgao