[英]How to check for existence of a pointer before delete in qt
我正在使用QAbstractTableModel
。 该模型将数据保存在其中。 用户单击创建并删除它。
用户单击创建模型后,这是连接的插槽:
void clicked(){
model = new QAbstractTableModel(data);
model->setManyThings();
}
用户单击以清除模型后,这是连接的插槽:
void clear(){
if (model != nullptr)
delete model;
}
但是,这无法检查model
是否存在。 如果单击两次清除,程序将直接崩溃。 如果未创建模型,请单击“清除”,程序直接崩溃。
那么如何检查模型是否存在
您将在第一次调用中删除model
对象,显然在第二次调用中它会崩溃,因为您试图调用已删除的对象。
实际上,您实际上是在检查是否存在model
,如果model != nullptr
表示此指针指向实际对象。 如果要重置“模型”对象,只需在删除另一个对象后创建一个新对象:
void clear(){
if (model != nullptr)
{
delete model;
model = new QAbstractTableModel(data);
}
}
如果要删除它并继续进行正确的检查,只需将指针设置为nullptr
:
void clear(){
if (model != nullptr)
{
delete model;
model = nullptr;
}
}
刚刚成立的指针在构造函数和为null clear
删除后。
更好的是,使用智能指针。
您无法测试任意指针是否有效,但您的clear
model
应为“ null” model
以表明已被删除:
void clear(){
delete model;
model = nullptr;
}
请注意, delete
空指针是有效的。
要处理这种情况,您必须关心model
指针的值。 这是几个步骤:
a)在类构造函数中初始化model
指针,
b)将model
指针值删除后将其设置为null,即:
void clear() {
if (model != 0) {
delete model;
model = 0;
}
}
我建议开始使用智能指针。 有很多选项可以检查指针是否存在。
QObject
的类的QPointer 。
nullptr
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.