我在成員函式中分配記憶體,如下所示:
void Wrapper::PutData() {
mpeople.append(new people("ALPHA","BEETA","GAMMA", this));
mpeople.append(new people("ALPHA","BEETA","GAMMA", this));
mpeople.append(new people("ALPHA","BEETA","GAMMA", this));
}
其中mpeople物件被宣告為
QList<QObject*> mpeople;
一切正常,直到我嘗試使用以下成員函式洗掉專案
void Wrapper::RemoveClient(int index){
if(index >= 0){
delete[] mpeople[index];
mpeople.removeAt(index);
}
resetModel();
}
uj5u.com熱心網友回復:
您正在嘗試對未使用標量 new 分配的物件進行標量洗掉。也就是說delete,不是delete []。
只需這樣做:
void Wrapper::RemoveClient(int index){
if(index >= 0){
delete mpeople[index];
mpeople.removeAt(index);
}
resetModel();
}
更現代的方法是使用 shared_ptr 或 unique_ptr 或等效的 qt 智能指標類。
像這樣宣告:
QList<std::shared_ptr<QObject>> mpeople;
像這樣插入:
mpeople.append(std::make_shared<people>("ALPHA","BEETA","GAMMA", this));
像這樣洗掉:
mpeople.removeAt(index); // pointer will get deleted for you when the last reference goes away
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/400885.html
