Qt,动态分配内存

时间:2013-07-17 12:59:29

标签: c++ qt pointers

我有一个小问题:我做了一个小程序,每当用户点击QPushButon时,用他的指针创建一个新对象,这是我的代码:

ajoute *az = new ajoute;
QVBoxLayout *layoutPrincipal = new QVBoxLayout;
问题是,每个创建的对象都有相同的名称,所以如果我想删除一个对象,可能会出错?

P.S:抱歉我的英语不好,我是法国人

2 个答案:

答案 0 :(得分:2)

您的对象很可能是堆栈,因此下一个实例不会“记住”前一个实例。需要更多代码来微调解释。

常见解决方案包括:

  • 在您的课程中使用属性(或多个)并在创建
  • 之前删除
  • 使用QSharedPointer并重置指向数据(从而实际释放前一个实例)
  • (Qt方式)制作“父QObject”的对象子节点:当对象树的根被处理时,它将被级联删除。

答案 1 :(得分:2)

  

问题是每个创建的对象都有相同的名称,所以如果我想删除一个对象,可能会有错误?

您似乎正在创建一组动态分配的对象,而您不知道如何存储其指针。最简单的方法是使用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);