을 삭제하려고 할 때 디버그 어설 션이 실패했습니다. C++을 처음 사용하고 가상 함수를 학습하고 클래스에 가상 함수가 있고 클래스에 포인터 멤버가 있으면 가상 소멸자를 작성해야한다는 것을 알아야합니다. 다음은 내 코드입니다, 나는 모두 디버그 어설의 오류 창 실패를 줄 것이다 가상 스튜디오 2013RCchar *
#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;
}
을 사용하고 있습니다.
이 경우 가상 소멸자를 올바르게 작성해야합니까?
고마워요.
감사합니다. @Vladp. 아래 코드를 책에서 읽어들입니다. 'int foo = 10; int * ptr = foo; delete ptr; ' 이것은 작동하지 않는 것 같습니다 ... – cgao