нет
кардинально неверное использование деструктора
Деструктор вызывается когда вы уже вызвали удаление объекта delete msp, и призван удалить все что объект проинициализировал но не его самого.
Отличный пример, использование класса для автоматического закрытия файла
class FR
{
FILE *f;
public:
FR(char* name)
{
this->f=fopen(name,'r');
}
void do()
{
// тут работаем с файлом
// если произойдет проблема, вызываем эксепшн
throw "The problem";
}
~FR()
{
fclose(this->f);
}
}
void main()
{
try
{
FR fr('test.txt');
fr.do();
printf("all ok");
} catch(const char* msg)
{
printf("Error: %s\n",msg);
}
}
тут голова не болит когда закрывать файл, так как деструктор будет вызван автоматически при окончании жизни объекта