Задать вопрос
@Lost_brain

Будет ли утечка памяти при использовании такой конструкции С++?

void foo()
{
    int x = 5;

    MySmartPointer<int> *msp = new MySmartPointer<int>(&x);
}


1) При выходе из функции уничтожится только указатель(msp) или указатель(msp) и все то, что находится по адресу?
2) Вызовет ли рекурсию следующая конструкция:
~MySmartPointer()
{
    delete this;
}

?
  • Вопрос задан
  • 166 просмотров
Подписаться 1 Простой 1 комментарий
Ответ пользователя rPman К ответам на вопрос (2)
@rPman
нет
кардинально неверное использование деструктора

Деструктор вызывается когда вы уже вызвали удаление объекта 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);
  }
}

тут голова не болит когда закрывать файл, так как деструктор будет вызван автоматически при окончании жизни объекта
Ответ написан