Qt,动态分配内存
Posted
技术标签:
【中文标题】Qt,动态分配内存【英文标题】:Qt, Dynamic allocation of memory 【发布时间】:2013-07-17 12:59:28 【问题描述】:我有一个小问题:我做了一个小程序,每次用户点击 QPushButon 时,都会用他的指针创建一个新对象,这是我的代码:
ajoute *az = new ajoute;
QVBoxLayout *layoutPrincipal = new QVBoxLayout;
问题是每个已创建的对象都具有相同的名称,所以如果我想删除一个对象,可能会出错?
P.S : 抱歉我的英语不好,我是法国人
【问题讨论】:
这里缺少一些上下文。什么是ajoute
,您如何处理您创建的实例?
我是否正确地说您只创建实例而不将它们放入容器中?
试图起草一个答案,但绝对缺乏上下文。对于非法语人士,“ajoute”的意思是“添加”
【参考方案1】:
问题是每个已创建的对象都具有相同的名称,所以如果我想删除一个对象,可能会出错?
似乎您正在创建一组动态分配的对象,但您不知道如何存储它们的指针。最简单的方法是使用QVector<ajoute*>
并存储动态分配的对象:
QVector<ajoute*> v;
现在,每当您创建 ajoute
时,您只需这样做:
v.push_back( new ajoute );
这将在向量(容器)的末尾添加指针。然后您可以按顺序访问它们:
v[0]; // first
v[1]; // second
v[2]; // third
显然你可以将它们删除为:
delete v[0]; // example
记住也要删除向量内的指针:
v.remove(0);
【讨论】:
谢谢,这是个好主意,我想这就是我需要的答案。因此,如果我需要创建一个“ajoute”对象属性表,我必须创建一个方法来复制“ajoute”属性的值,例如主窗口中的 QString 变量,并在 oder show 中创建另一个表并修改“ ajoute" 对象属性? @DanSnow,“ajoute 对象属性”是什么意思? 非常感谢,但我想我会放弃创建对象的想法,我会使用一个简单的容器。如果有人感兴趣,我可以将我的软件的 beta 版本传给他进行测试(它是一个密码管理器)。【参考方案2】:您的对象很可能在堆栈上,因此下一个实例不会“记住”前一个实例。需要更多代码来微调解释。
常见的解决方案包括:
在你的类中使用一个(或多个)属性并在创建之前删除 使用 QSharedPointer 并重置指向的数据(从而实际上释放了先前的实例) (Qt 方式)使对象成为“父 QObject”的子对象:当对象树的根被处理掉时,它将被级联删除。【讨论】:
其实我还没有做这个程序,我只是在想怎么做。 事实上我还没有制作这个程序,我只是在想怎么做。该程序的工作方式如下: 1-用户在 QLineEdit 中编写文本 2-文本存储在变量中 3-“ajoute”对象被创建 4-变量的值被发送到对象“ajoute”5 -“ajoute”对象在 QVBoxLayout 中显示 QLabel 6-出现另一个 QLineEdit,用户可以创建另一个“ajoute”对象。就像聊天 看起来您希望将字符串存储在QStringList
中,然后使用QStringListModel
作为适配器将此列表显示在QListView
中。我建议阅读doc.qt.digia.com/4.7/model-view-programming.html#view-classes
谢谢 :) 我想我会放弃创建对象的想法,我会使用一个简单的容器。如果有人感兴趣,我可以将我的软件的 beta 版本传给他进行测试(它是一个密码管理器)。以上是关于Qt,动态分配内存的主要内容,如果未能解决你的问题,请参考以下文章