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存在。如果我点击两次清除,程序会直接崩溃。如果我点击清除没有创建模型,程序就直接崩溃了。
那么如何检查模型是否存在
您正在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)