Форум программистов, компьютерный форум CyberForum.ru

Ненужное удаление объектов - C++

Восстановить пароль Регистрация
 
xam max
3 / 3 / 0
Регистрация: 27.09.2009
Сообщений: 199
01.11.2013, 17:07     Ненужное удаление объектов #1
В классе есть метод, в котором при определенных условиях создаются объекты и помещаются в список, так вот как сделать так чтобы объекты после выхода из функции не удалялись.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for(int i=0;i<720;i+=vertstep)
        for(int j=0;j< 360;j+=horstep)
        {
            ...
            if(PointList.count()>interval)
            {
                pos=PointList.count()-interval-1;
                now = PointList.count()-1;
                if(!(now+1 % interval ==0) )
                {
                    Face face1(&PointList[now],&PointList[pos]);
                    Face face2(&PointList[now],&PointList[pos+1]);
                    Face face3(&PointList[pos],&PointList[pos+1]);
                    FaceList.append(face1);
                    FaceList.append(face2);
                    FaceList.append(face3);
                    ...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
newbie666
Заблокирован
01.11.2013, 17:43     Ненужное удаление объектов #2
ну так сохраняй свои фэйсы в глобальный переменных, в членах класса, в векторе класса и тд
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.11.2013, 20:18     Ненужное удаление объектов #3
Цитата Сообщение от xam max Посмотреть сообщение
так вот как сделать так чтобы объекты после выхода из функции не удалялись.
Зачем? Ведь они добавлены в FaceList.
ValeryS
Модератор
6374 / 4840 / 442
Регистрация: 14.02.2011
Сообщений: 16,043
01.11.2013, 20:24     Ненужное удаление объектов #4
Цитата Сообщение от xam max Посмотреть сообщение
В классе есть метод, в котором при определенных условиях создаются объекты и помещаются в список,
а список у тебя не локальный,случаем?
xam max
3 / 3 / 0
Регистрация: 27.09.2009
Сообщений: 199
01.11.2013, 23:36  [ТС]     Ненужное удаление объектов #5
Нет список не локальный, список - член класса, проблема как я понял заключается в том что у меня создается объект polygon которому передаются ссылки на объекты из списка pointmass, после окончания цикла, объект удаляется и пытается удалить точки которые в pointmass.... ну по крайней мере прога рушится в деструкторе polygon.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
for(int i=0;i<720;i+=vertstep)
        for(int j=0;j< 360;j+=horstep)
        {
            x=(R+inc*i+r*qCos(j*180/M_PI))*qSin(i*180/M_PI);
            y=(R+inc*i+r*qCos(j*180/M_PI))*qCos(i*180/M_PI);
            z=r*qSin(j*180/M_PI)+step*i;
            QVector4D Point3D(x,y,z,1);
            Point3D = Point3D * TransformMatrix;
            QPointF Point2D(Point3D.x(),Point3D.y());
            PointList.append(Point2D);
            if(PointList.count()>interval)
            {
                pos=PointList.count()-interval-1;
                now = PointList.count()-1;
                if(!(now+1 % interval ==0) )
                {
                    Face face1(&PointList[now],&PointList[pos]);
                    Face face2(&PointList[now],&PointList[pos+1]);
                    Face face3(&PointList[pos],&PointList[pos+1]);
                    FaceList.append(face1);
                    FaceList.append(face2);
                    FaceList.append(face3);
                    MyPolygon p(&PointList[now],&PointList[pos],&PointList[pos+1]);
                    p.FaceMass[0]=&face1;
                    p.FaceMass[1]=&face2;
                    p.FaceMass[2]=&face3;
                    PolygonList.append(p);
                }
polygon.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <face.h>
#include <QVector4D>
 
class MyPolygon
{
public:
    MyPolygon();
    MyPolygon(QPointF *point1,QPointF *point2,QPointF *point3);
    MyPolygon(const MyPolygon &p);
    Face **FaceMass;
    QPointF **PointMass;
    ~MyPolygon();
    static int Dim;
};
polygon.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
MyPolygon::MyPolygon(QPointF *point1,QPointF *point2,QPointF *point3)
{
    FaceMass = new Face *[Dim];
    PointMass = new QPointF *[Dim];
    PointMass[0]=point1;
    PointMass[1]=point2;
    PointMass[2]=point3;
}
 
MyPolygon::MyPolygon()
{
    FaceMass = new Face *[Dim];
    PointMass = new QPointF *[Dim];
}
 
MyPolygon::MyPolygon(const MyPolygon &p)
{
    this->Dim = p.Dim;
    this->FaceMass = new Face*[Dim];
    this->PointMass = new QPointF *[Dim];
    for(int i=0;i<Dim;++i)
    {
        FaceMass[i]= new Face(*(p.FaceMass[i]));
        PointMass[i]= new QPointF(*(p.PointMass[i]));
    }
}
 
int MyPolygon::Dim=3;
 
MyPolygon::~MyPolygon()
{
    for(int i=0;i<Dim;++i)
    {
        delete FaceMass[i];
        delete PointMass[i];
    }
    delete [] FaceMass;
    delete [] PointMass;
}
oxotnik
 Аватар для oxotnik
1584 / 1061 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
01.11.2013, 23:39     Ненужное удаление объектов #6
конструктор копирования Face присутствует?
xam max
3 / 3 / 0
Регистрация: 27.09.2009
Сообщений: 199
01.11.2013, 23:41  [ТС]     Ненужное удаление объектов #7
да
C++
1
2
3
4
5
Face::Face(const Face &f)
{
    this->Begin = new QPointF(f.Begin->x(),f.Begin->y());
    this->End = new QPointF(f.End->x(),f.End->y());
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.11.2013, 23:50     Ненужное удаление объектов #8
Не видно, что такое FaceList, и где он создаётся.
xam max
3 / 3 / 0
Регистрация: 27.09.2009
Сообщений: 199
02.11.2013, 16:54  [ТС]     Ненужное удаление объектов #9
C++
1
2
3
4
5
6
7
8
class Conical_Spiral : public QObject
{
    Q_OBJECT
public:
    QList<QPointF> PointList;
    QList<MyPolygon> PolygonList;
    QList<Face> FaceList;
    ...
вышепреведенный код с циклом из метода этого класса
ValeryS
Модератор
6374 / 4840 / 442
Регистрация: 14.02.2011
Сообщений: 16,043
02.11.2013, 17:03     Ненужное удаление объектов #10
xam max
у тебя Qt
Цитата Сообщение от xam max Посмотреть сообщение
Q_OBJECT
там несколько другая идеология
наследники QObject сами чистят за собой при удалении
попробуй задать вопрос на специализированной ветке
http://www.cyberforum.ru/qt/
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.11.2013, 17:10     Ненужное удаление объектов #11
Цитата Сообщение от xam max Посмотреть сообщение
вышепреведенный код с циклом из метода этого класса
Имеется ввиду первый пост? Тема несколько запутывается. Если есть нелокальный объект Conical_Spiral и в нём FaceList, то в чём проблема, по извлечению из него добавленных Face? Они разве не сохраняются? Или Conical_Spiral локальный?
xam max
3 / 3 / 0
Регистрация: 27.09.2009
Сообщений: 199
02.11.2013, 18:03  [ТС]     Ненужное удаление объектов #12
Короче суть вопроса в том что программа почему то рушится вот здесь:
C++
1
2
3
4
5
6
7
8
9
10
MyPolygon::~MyPolygon() //(polygon если че не наследуется от qobject)
{
    for(int i=0;i<Dim;++i)
    {
        delete FaceMass[i];
        delete PointMass[i]; //вот на этой строчке
    }
    delete [] FaceMass;
    delete [] PointMass;
}
я думаю что это из за того что ранее в методе conical_spiral делается PointMass[i]=&PointList[k], где PointMass - член polygon, PointList - член conical_spiral, возможно я неправильно думаю )), и да пишу я на qt но мне кажется что вопрос все же утыкается в с++
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2013, 18:20     Ненужное удаление объектов
Еще ссылки по теме:

C++ Добавление и удаление объектов с перегрузкой операторов '+' и '-'
C++ Удаление объектов структуры из файла по условию
C++ Удаление динамических объектов

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6374 / 4840 / 442
Регистрация: 14.02.2011
Сообщений: 16,043
02.11.2013, 18:20     Ненужное удаление объектов #13
Цитата Сообщение от xam max Посмотреть сообщение
и да пишу я на qt но мне кажется что вопрос все же утыкается в с++
понимаешь ли
если в конструкторе класса производном от QObject
сделать вот так
C++
1
blabla* bl=new blabla(this);
то в деструкторе delete для blabla вызывать не надо
деструктор сам вызовет
почему я и говорю попытайся в той ветке, скорее всего у тебя два удаления свое и автоматическое
Yandex
Объявления
02.11.2013, 18:20     Ненужное удаление объектов
Ответ Создать тему
Опции темы

Текущее время: 17:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru