我正在使用QAbstractTableModel
。该模型包含数据。它是在用户点击时创建和删除的。
这是用户点击创建模型后的连接插槽:
void clicked(){
model = new QAbstractTableModel(data);
model->setManyThings();
}
用户单击以清除模型后,这是连接的插槽:
void clear(){
if (model != nullptr)
delete model;
}
但是,这无法检查model
是否存在。如果我单击清除两次,程序直接崩溃。如果没有创建模型,我点击清除,程序直接崩溃。
那么如何检查模型是否存在
答案 0 :(得分:3)
您正在删除第一次通话中的model
对象,显然是在第二次通话中它因为您尝试呼叫已删除的对象而崩溃。
事实上,如果model
存在,那么你实际上是在chekcing,如果model != nullptr
意味着这个指针指向一个实际的对象。
如果您想重置'模型'对象只是在删除另一个后创建一个新对象:
void clear(){
if (model != nullptr)
{
delete model;
model = new QAbstractTableModel(data);
}
}
如果您想删除它并继续正确检查,只需将指针设置为nullptr
:
void clear(){
if (model != nullptr)
{
delete model;
model = nullptr;
}
}
答案 1 :(得分:2)
只需在构造函数中将指针设置为null,并在删除后将其设置为clear
。
更好的是,使用智能指针。
答案 2 :(得分:2)
您无法测试任意指针是否有效,但您的clear
应该" null" model
表示已将其删除:
void clear(){
delete model;
model = nullptr;
}
请注意,它对delete
空指针有效。
答案 3 :(得分:0)
要处理这种情况,您必须关心model
指针的值。以下是几个步骤:
a)在类构造函数中初始化model
指针,
b)删除后将model
指针值设置为null,即:
void clear() {
if (model != 0) {
delete model;
model = 0;
}
}
答案 4 :(得分:0)
I would suggest start using smart pointers. There are many options to check if the pointer exists.
QObject
的类。
nullptr
。