मैं जानता हूँ कि क्यूटी स्मृति प्रबंधन के बारे में सवाल का एक बहुत देखते हैं, लेकिन मैं मेरा कोई ऐसा उत्तर नहीं मिल सका।क्यूटी मेमोरी मैनेजमेंट वस्तुओं
तो क्यूटी विजेट के लिए, अगर आप इस पारित (जो माता-पिता विजेट है) ऑब्जेक्ट निर्माण में पैरामीटर के रूप में, माता पिता विजेट यह के स्वामित्व लेता है और इसे हटा देता है जब माता-पिता मर जाता है। वही बात होती है जब आप किसी लेआउट में विजेट जोड़ते हैं और विजेट पर वह लेआउट सेट करते हैं।
लेकिन क्या होता अगर मैं उदाहरण के लिए एक Qcolor वस्तु के लिए एक सूचक की घोषणा? QColor को किसी अन्य विजेट के लिए बच्चे के रूप में नहीं जोड़ा जा सकता है या लेआउट में जोड़ा नहीं जा सकता है। जब विजेट मर जाता है या मुझे विनाशक में इसे मैन्युअल रूप से हटाने की आवश्यकता होती है तो क्या स्मृति जारी की जाएगी?
एक उदाहरण यहाँ ... क्या m_pColor साथ होता है जब विजेट नष्ट हो जाएगा? क्या यह नष्ट हो जाएगा या एक स्मृति रिसाव होगी? कोड में किसी भी गलती के लिए क्षमा करें, मैं इसे संकलित नहीं किया था, मैं सिर्फ इसे यहाँ लिखा उदाहरण के रूप में।
#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);
}