有什么方法可以使用Qt而不为所有内容使用动态内存?

JBL*_*JBL 5 c++ qt dynamic-memory-allocation

因此,我想我已经在网络上进行了彻底的搜索,发现没有什么真正有用的(最多只是令人困惑……)。

我想知道如何(如果可能)将Qt与非动态内存配合使用。我面临的问题是,对于许多小部件,我确切地知道我想要使用什么(这些子小部件,这些布局,固定数量等)。但是,当您不使用动态内存时,Qt中的所有内容似乎都会受到影响。一个简单的示例是QLayout,它来自Qt文档,旨在对所添加内容的所有权。所以基本上,下面的代码:

//In header
class ThumbnailDialog : public QDialog
{
    Q_OBJECT
public:
    ThumbnailDialog(QWidget* parent = 0);
    ~ThumbnailDialog(void);
private:
    QPushButton m_confirm;
    QPushButton m_cancel;

    QHBoxLayout m_buttonsLayout;
};

//Implementation of ctor
ThumbnailDialog::ThumbnailDialog(QWidget* parent):
    QDialog(parent)
{
     //...
     m_buttonsLayout.addWidget(&m_confirm);
     m_buttonsLayout.addWidget(&m_cancel);
     //...
     setLayout(&m_dialogLayout);
}
Run Code Online (Sandbox Code Playgroud)

...将最终(在MSVC上)导致调试断言失败,_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)因为在ThumbnailDialogdtor中,布局试图删除按钮...显然不应该这样做。

因此,像“ Qt Expert”所提倡的那样,我是否被迫在所有地方都使用动态记忆(虽然提到了“堆”……)?这似乎是错误的,因为这阻止了RAII的使用(如果父子关系意味着将进行删除,那么我不能使用智能指针来执行此操作)。对于编译时已知的内容,诉诸动态内存也感觉非常错误……(但是我可能是错的,这只是我的感觉)。

所以:有没有一种方法可以使用Qt而不new为每个小部件/布局使用动态内存和s?

Lig*_*ica 1

不,不是真的。我耽心。Qt 依赖于这个东西。