2012-11-23 39 views
5

Tôi biết có rất nhiều câu hỏi liên quan đến quản lý bộ nhớ qt nhưng tôi không thể tìm thấy câu trả lời cho tôi. Vì vậy, đối với các tiện ích qt, nếu bạn vượt qua điều này (là phụ huynh) làm tham số tại tạo đối tượng, tiện ích con sẽ sở hữu nó và xóa nó khi cha mẹ chết. Điều tương tự cũng xảy ra khi bạn thêm tiện ích vào bố cục và đặt bố cục đó trên tiện ích.Quản lý bộ nhớ Qt cho các đối tượng Qt

Nhưng điều gì sẽ xảy ra nếu tôi khai báo con trỏ với đối tượng QColor chẳng hạn? Không thể thêm QColor làm con cho một tiện ích con khác hoặc không thể thêm vào bố cục. Bộ nhớ sẽ được phát hành khi widget bị chết hoặc tôi cần phải xóa nó bằng tay trong destructor?

Đây là ví dụ ... điều gì xảy ra với m_pColor khi Widget sẽ bị hủy? Nó sẽ bị phá hủy hoặc sẽ có một rò rỉ bộ nhớ? Xin lỗi vì bất kỳ lỗi nào trong mã, tôi không biên dịch nó, tôi chỉ viết nó ở đây làm ví dụ.

#ifndef WIDGET_H 
#define WIDGET_H 

#include <QWidget> 

class QHBoxLayout; 
class QPushButton; 
class QColor; 

class Widget : public QWidget 
{ 
    Q_OBJECT 

public: 
    Widget(QWidget *parent = NULL); 

public: 
    QHBoxLayout *m_pLayout; 
    QPushButton *m_pButton; 
    QColor *m_pColor; 
}; 

#endif // WIDGET_H 

#include "widget.h" 

#include <QHBoxLayout> 
#include <QPushButton> 
#include <QColor> 

Widget::Widget(QWidget *parent) 
    : QWidget(parent) 
{ 
    m_pLayout = new QHBoxLayout; 
    m_pButton = new QPushButton(tr("Button")); 
    m_pLayout->addWidget(m_pButton); 

    m_pColor = new QColor(0, 0, 0, 255); 

    setLayout(m_pLayout); 
} 

Trả lời

6

gì bạn đề nghị chỉ có giá trị cho các lớp kế thừa QObject (tức là có QObject là một trong những lớp cha của họ). Các thuộc tính này không áp dụng cho các lớp khác (thậm chí được xây dựng trong Qt). Vì QColor không phải là phân lớp của QObject, đối tượng được tham chiếu bởi m_pColor sẽ không bị hủy khi Widget bị hủy. Bạn sẽ phải làm điều đó bằng tay.

2

Không có tham chiếu nào cho tiện ích phụ huynh để hủy m_pColor. bạn có thể sử dụng Valgrind để kiểm tra rò rỉ bộ nhớ trên tệp thực thi này.

Các vấn đề liên quan