我最近加入了一个新项目,其中充满了成语,如:
void foo()
{
Widget* temp = new Widget;
connect(temp, &Widget::signalTriggerred,[this, temp ]()
{
do cool staff...
}
}
你可以看到没有删除任何东西,我甚至害怕用户类" Widget"继承了QObject,这仍然是一个漏洞。在上述情况下,QT是否做了一些想要防止韭菜的事情?
我打算做什么:
void foo
{
std::shared_ptr<Widget > temp( new Widget () );
connect(temp.get(), &Widget::signalTriggerred,[this, temp] ()
{
do even cooler things...
}
}
我的apporach有问题吗? (例如,我不想使用.get(),但编译器错误迫使我使用它)。
编辑:因为在我的情况下没有父母,所以它是不同的。重复的问题寻求父母子女案件的答案。在这种情况下,我已经知道不会有韭菜。在我的问题中,我问的是创建一个基于QObject的本地对象。并连接它。
答案 0 :(得分:0)
不太确定你想从问题中得到什么,但如果你需要删除小部件并且它是从QObject派生的,你可以在lambda表达式中删除它,假设它不会去在此范围之后使用:
void foo()
{
Widget* temp = new Widget;
connect(temp, &Widget::signalTriggerred,[this, temp ]()
{
temp->deleteLater();
}
}