我目前有 3 个公共(public) QWidget 类。 -> x, y ,z 都是 qwidgets.
在我的主窗口中,我有指向 x、y、z 的指针。
所以成员:
X* m_x;
Y* m_y;
Z* m_z;
一个成员函数:
void MainWindow::deleteScreen(QWidget** widget)
{
if(widget != NULL)
{
delete widget;
widget = NULL;
}
}
称为:
deleteScreen(&m_x);
-> 导致无效转换。
如果我将 deleteScreen
参数更改为 QWidget* widget
并调用 deleteScreen(m_x)
它将删除内存,但它不会'将 m_x
设置为 NULL。 (只有局部变量,widget)
-> 有什么方法可以让 deleteScreen
函数删除给定的小部件并将成员变量的值设置为 NULL?
谢谢!
最佳答案
实际上,a double pointer to a base class cannot be used as a double pointer to a derived class ;所以你可能不得不求助于模板:
template<typename T>
void deleteAndCleanup(T*& ptr)
{
delete ptr;
ptr = NULL;
}
// called like this:
deleteAndCleanup(m_x);
关于c++ - Qt:QWidgets 和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18557897/