Tôi cần chèn con trỏ của các lớp (được kế thừa từ QObject) vào một Danh sách phát. Tôi biết rằng cú pháp sau đây có thể được sử dụng:Thêm con trỏ vào QList
.h
QList<MyObject*> list;
cpp
list.append(new MyObject("first", 1));
list.append(new MyObject("second", 2));
...
và sau đó giải phóng bộ nhớ:
if(!list.isEmpty())
{
qDeleteAll(list);
list.clear();
}
này nên có hiệu lực và không không gây ra bất kỳ rò rỉ bộ nhớ nào (theo như tôi biết). Tuy nhiên, tôi cần phải khởi tạo các đối tượng trước khi thêm chúng vào bộ sưu tập. Đoạn mã sau có thể gây ra một số lỗi như rò rỉ bộ nhớ hoặc con trỏ lơ lửng (tôi sẽ sử dụng cùng một cách để xóa con trỏ như trên)?
MyObject *obj;
for(i = 0; i < 5; i++)
{
obj = new MyObject();
if(!obj.Init(i, map.values(i)))
{
// handle error
}
else
{
list.append(obj);
}
}
Cảm ơn.
chỉ là một lưu ý: if (list.isEmpty()) khi sử dụng qDeleteAll() là thừa, tôi chỉ bỏ qua nó. –