class String
{
public:
String(char *str)
{
len_ = strlen(str);
p_str_ = new char[len_ + 1];
strcpy_s(p_str_,20, str);
cout << "String 생성자" << endl;
}
~String() { delete[] p_str_; cout << "String 소멸자" << endl; }
private:
char *p_str_;
int len_;
};
class MyString : public String
{
public:
MyString(char *str1, char *str2) : String(str1)
{
mylen_ = strlen(str2);
p_mystr_ = new char[mylen_ + 1];
strcpy_s(p_mystr_, 20, str2);
cout << "MyString 생성자" << endl;
}
~MyString() { delete[] p_mystr_; cout << "MyString 소멸자" << endl; }
private:
char *p_mystr_;
int mylen_;
};
int main()
{
String *p_str = new MyString("String", "MyString");
delete p_str;
return 0;
}
이렇게 될때 메인에 딜리트 부분에서 스트링의 소멸자가 사용되는데 오류가 나서 안되더라구요 메인의 p_str한테 p_str_가 존재하니까 소멸자가 사용되서 정상적으로 소멸해야 되는거 아닌가요? 출력문 전에 오류나네요.
여기서 스트링의 소멸자가 사용되는데 마이스트링의 소멸자를 사용하게 하는 방법이 뭐죠?
스트링 소멸자에 버추얼 붙이면 된다는데 안되더라구요 마이스트링의 소멸자랑 이름이 같지 않아서 버추얼 붙여도 소용 없지 않나요?