在Qt中,使用QSharedPointer来管理动态分配的内存是一种常见的做法,它可以自动地进行引用计数,确保资源在不再被使用时被正确释放。

然而,如果在使用QSharedPointer时,没有正确地处理对象的所有权,可能会导致对象被删除多次,从而引发程序崩溃或未定义行为。

在你的情况下,问题可能是在栈上创建了一个Student对象,然后将其传递给一个QSharedPointer。当QSharedPointer对象超出其作用域时,它会尝试删除Student对象,但是由于Student对象在栈上被创建,它的生命周期由栈管理,因此删除Student对象会导致程序崩溃。

为了解决这个问题,你可以将Student对象从栈上移动到堆上,这样QSharedPointer可以正确地管理其生命周期。你可以使用new关键字在堆上创建Student对象,然后将其传递给QSharedPointer。这样,当QSharedPointer超出其作用域时,它会自动删除Student对象,而不会导致重复删除。

例如:

QSharedPointer<Student> studentPtr(new Student());

这样,你就避免了在栈上创建的对象被错误地删除多次的问题。请确保在不再使用QSharedPointer时,及时将其置为nullptr,以避免悬空指针的问题

Qt一个在栈上创建的Student类用QSharedPointer指向Student类导致被delete两次

原文地址: https://www.cveoy.top/t/topic/ik0q 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录