删除 QSharedPointer 指向的 QObject
Deleting a QObject that QSharedPointer is pointing to
在我的项目中,我创建了 QObject
个实例并赋予它们父子关系。我还想跟踪一些具有 QSharedPointer
个实例的对象。
当对象被 delete childObject;
或 delete parentObject;
删除时,我希望 QSharedPointer
实例在调用 return true
时17=].
但是,在删除 QSharedPointer
指向的任何对象后,我的程序崩溃了。
这是我的代码:
QObject *child = new QObject();
QSharedPointer<QObject> ptr(child);
delete child;
仅此一项就使我的程序崩溃。我阅读了 QSharedPointer
的文档,它指出 A QSharedPointer object can be created from a normal pointer
所以我有点困惑为什么 QSharedPointer
无法处理指向被删除的对象。
QPointer
没有这个问题,我什至可以调用 isNull()
,但是我需要 QSharedPointer
的原因是因为一些子对象将被创建并且没有被赋予parent,此时我希望在所有相关 QSharedPointers
超出范围时删除子对象。
QSharedPointer 获取您传递给它的原始指针的所有权。这意味着一旦所有共享指针超出范围,它将删除它指向的对象。如果您已经手动删除了一个对象,那么这将导致双重释放,从而导致崩溃(如果您幸运的话!)。
使用共享指针,您根本不需要手动调用 delete,因为它会像上面提到的那样自动发生。
在我的项目中,我创建了 QObject
个实例并赋予它们父子关系。我还想跟踪一些具有 QSharedPointer
个实例的对象。
当对象被 delete childObject;
或 delete parentObject;
删除时,我希望 QSharedPointer
实例在调用 return true
时17=].
但是,在删除 QSharedPointer
指向的任何对象后,我的程序崩溃了。
这是我的代码:
QObject *child = new QObject();
QSharedPointer<QObject> ptr(child);
delete child;
仅此一项就使我的程序崩溃。我阅读了 QSharedPointer
的文档,它指出 A QSharedPointer object can be created from a normal pointer
所以我有点困惑为什么 QSharedPointer
无法处理指向被删除的对象。
QPointer
没有这个问题,我什至可以调用 isNull()
,但是我需要 QSharedPointer
的原因是因为一些子对象将被创建并且没有被赋予parent,此时我希望在所有相关 QSharedPointers
超出范围时删除子对象。
QSharedPointer 获取您传递给它的原始指针的所有权。这意味着一旦所有共享指针超出范围,它将删除它指向的对象。如果您已经手动删除了一个对象,那么这将导致双重释放,从而导致崩溃(如果您幸运的话!)。
使用共享指针,您根本不需要手动调用 delete,因为它会像上面提到的那样自动发生。