我有“老式”C编程经验(即我关心指针和内存管理).我确实想利用现代概念.
由于我的应用程序大量使用Qt,我想使用Qt的智能指针.然而,我对一般的智能指针以及它们在Qt中的使用感到有些困惑.
1.)据我所知,如果我从QObject派生,我应该更好地坚持Qt的对象树和所有权模型,而忘记智能指针.正确?
2.)在C中,我可以使用std :: shared_ptr和std :: unique_ptr. Qt中的等效智能指针是什么?
假设我有以下代码:
QList * foobar(MyOtherObject *ptr) {
// do some stuff with MyOtherObject
QList ls = new QList();
for(int i=0;i<10;i++) {
MyObject* mi = new MyObject();
...
ls.insert(mi);
}
return ls;
}
int main() {
MyOtherObject* foo = new MyOtherObject();
QList *bar = foobar(foo);
// do stuff
// and don't care about cleaning up?!
}
3.)如何使用智能指针将上述代码段翻译成版本?
4.)特别是:我应该将功能签名更改为使用智能指针吗?它似乎创建了非常复杂的类型签名(返回类型和传递的参数).另外,如果某些“遗留”函数调用另一个函数 – 使用原始指针编写函数签名更好,并且仅使用智能指针“内部”函数吗?
5.)什么smartpointer应该替换功能foobar中的ls?应该用于mi的指针类型是什么,即存储在QList中的对象是什么?