Member 14594285 Ответов: 3

Удаление значения, когда оно имеет новое значение.


Я должен сделать удаление значения, но если значение имеет новое...

так

if (a = новый диалог)

я делаю удаление...иначе я не делаю удаление...как я должен это делать?

Что я уже пробовал:

Я пытался:

Если(а)
удалить;

но это не работает, у меня есть блок программы, когда у А нет нового

3 Ответов

Рейтинг:
2

CPallini

Рецепт таков:"вы должен всегда инициализируйте свой указатель"nullptr если вам нужно будет назначить его позже), то вы можете удалить его или нет, в зависимости от обстоятельств.
Другим подходом было бы использование интеллектуального указателя, таким образом, удаление не требуется.
Попробуйте, например:

#include <iostream>
#include <memory>
using namespace std;

struct Dialog
{
  Dialog(){ cout << "Dialog ctor\n"; }
  ~Dialog(){ cout << "Dialog dtor\n";}
};

int main()
{
  {
    cout << "test case 1\n";
    Dialog * pdlg = new Dialog();
    if ( pdlg ) delete pdlg;
  }
  {
    cout << "test case 2\n";
    Dialog * pdlg{ nullptr };
    if ( pdlg ) delete pdlg;
  }
  {
    cout << "test case 3\n";
    auto spdlg = make_unique<Dialog>();
  }

  {
    cout << "test case 4\n";
    unique_ptr<Dialog> spdlg{};
  }
}


Рейтинг:
2

Shao Voon Wong

Если он показывает диалог MFC, просто сделайте это.

CMyDialog dlg;
dlg.DoModal();
// no need to delete because is not new.


Рейтинг:
0

Richard MacCutchan

a = new Dialog; // the result must be an object reference or nullptr.

// ...

if(a)
{
    delete a;
    a = nullptr;
}

Все вышесказанное должно сработать.