如何在qt中删除之前检查指针是否存在

tom*_*tom 1 c++ qt delete-operator

我正在使用一个QAbstractTableModel. 该模型在其中保存数据。它是根据用户点击创建和删除的。

这是用户点击创建模型后连接的槽:

void clicked(){
    model = new QAbstractTableModel(data);
    model->setManyThings();
}
Run Code Online (Sandbox Code Playgroud)

这是用户点击清除模型后连接的插槽:

void clear(){
    if (model != nullptr)
        delete model;
}
Run Code Online (Sandbox Code Playgroud)

但是,这无法检查是否model存在。如果我点击两次清除,程序会直接崩溃。如果我点击清除没有创建模型,程序就直接崩溃​​了。

那么如何检查模型是否存在

Net*_*ave 6

您正在model第一次调用时删除该对象,显然在第二次调用中它会崩溃,因为您试图调用一个已删除的对象。

事实上,你实际上是在检查是否model存在,如果model != nullptr意味着这个指针指向一个实际的对象。如果您想重置“模型”对象,只需在删除另一个对象后创建一个新对象:

void clear(){
    if (model != nullptr)
    {
        delete model;
        model = new QAbstractTableModel(data);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您只想删除它并继续进行正确的检查,只需将指针设置为nullptr

void clear(){
    if (model != nullptr)
    {
        delete model;
        model = nullptr;
    }
}
Run Code Online (Sandbox Code Playgroud)