我有一个问题。如何使用析构函数执行类似QObject的操作?
Class Person : public QObject{
//...
public:
Person(QObject *p = nullptr) : QObject(p){}
virtual ~Person() { QDebug() << "name: " << name << "\n";}
// Getters, Setters
};
int main(int argc, char* argv[]){
QCoreApplication a(argc, argv);
Person *Cris{new Person};
Person *Henry{new Person(Cris)};
Cris->setName("Cris");
Henry->setName("Henry");
delete Cris;
}
输出是:
name: Cris.
name: Henry.
我只想删除Base类,并且Derived类将被自己删除。像QT一样,但没有QT。
谢谢。
这与推导无关。当您调用此构造函数时:
Person *Henry{new Person(Cris)};
它创建了Henry作为Cris的孩子。在Qt中,每个QObject可以有许多子级。删除父对象时,子对象也将被删除。这是通过保留一个子代列表并在调用父析构函数时将其删除来完成的(在Qt中,它比这要复杂得多,因为信号/插槽等也应处理)。您可以通过使用对象的标准容器保存子项列表来创建类似的实现。