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

Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд - C++

Восстановить пароль Регистрация
 
 
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
05.02.2012, 04:46     Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд #1
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
40
41
42
43
44
45
46
47
#include <iostream>
#include <vector>
#include <cstdlib>
#include <set>
 
using namespace std;
 
#define F_SIZE 30
#define DICE 6
 
 
class field{
private:
    vector<int*> rms;
    int *something(){
        return new int(DICE);
    }
public:
    field(bool autogen){
        if(autogen){
            int n = 5;
            while(n--){
                rms.push_back(something());
            }
        }else{
            cout << "Have not writed yet;\n";
            //herein we have to write something...
        }cout << rms.size();
        cout << " | end of field's constructor.\n";
    }field(){
        field(true);
    }void show(){
        cout << rms.size() << ":\n";
        for(vector<int*>::iterator i = rms.begin(); i != rms.end(); i++){
            cout << "(" << (**i) << "; " << (**i) << ")";
            cout << " |=| ";
            cout << "(" << (**i) << ";" << (**i) << ")";
            cout << endl;
        }
    }
};
 
int main(){
    field fl;
    fl.show(); //WTF!?. Why vector erased after constructor?..
    return 0;
}
Вывод:
Код
5 | end of field's constructor.
0:
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2012, 04:46     Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд
Посмотрите здесь:

Мозг взрывается C++
Правильно ли очищается память? C++
C++ Не очищается поток после cin.clear()
C++ Добавление в вектор объекта класса в конструкторе
C++ Cpp. Как очищается память в функциях?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
05.02.2012, 08:18     Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд #2
C++
1
field(true);
замените на
C++
1
*this = field(true);
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
05.02.2012, 08:23     Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд #3
AnyOne697, а лучше просто вынесите инициализацию в отдельный закрытый сервисный метод и вызывайте его из каждого конструктора, пока нет релизного компилятора с делегированием конструкторов.
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
05.02.2012, 08:59  [ТС]     Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд #4
А в чём, собственно проблема??? Нельзя использовать конструктор внутри метода класса? Кажется понял тонкость сию =) Спасибо!
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
05.02.2012, 09:02     Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд #5
AnyOne697, там, где вы "вызвали конструктор", вы на самом деле создали временный объект, который ушел в небытие сразу после создания. Так один конструктор из другого вызывать нельзя. В новом стандарте появилось делегирование конструкторов, но у него другой синтаксис, и пока ещё ни один релизный компилятор его не поддерживает (вроде в gcc 4.7.0 оно есть, но он ещё не релизный).
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
05.02.2012, 09:35  [ТС]     Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд #6
Спасибо! Теперь я знаю всё и могу продолжать занимать фигнёй! Да прибудет со мной сила и напишу я что-то_никому_ненужное!

Кстати, вот такой вот вопрос не по теме: есть ли кроссплатформенная прослойка между библиотекой и ОС (компилятором). Qt не работает =(
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
05.02.2012, 10:52     Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд #7
C++
1
field(bool autogen = true) {...}
А конструктор без параметров убрать
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
05.02.2012, 11:09  [ТС]     Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд #8
Цитата Сообщение от Nameless One Посмотреть сообщение
field(bool autogen = true) {...}
cut Я же думал об этом... Ночью... Но забыл =(
Thanks.

Добавлено через 10 минут
Oh no!.. Failed!..
Для этого придётся вызывать:
field fl();
Что ессено бред =(
 Комментарий модератора 
Ещё один мат и карточка ваша!
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
05.02.2012, 11:11     Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд #9
Цитата Сообщение от AnyOne697 Посмотреть сообщение
field fl();
Нет, правильно:
C++
1
field fl;
Вообще field fl(); это прототип функции, т.е. это не есть создание объекта.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
05.02.2012, 11:11     Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд #10
AnyOne697, ничего подобного. Так код не скомпилируется, потому что эта строка объявляет прототип функции без параметров, возвращающей объект типа field.
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
05.02.2012, 11:12     Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд #11
Цитата Сообщение от AnyOne697 Посмотреть сообщение
Для этого придётся вызывать:
field fl();
Что ессено бред =(
что-что?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
class foo
{
public:
    foo(int i = 3)
    {
    std::cout << i << std::endl;
    }
};
 
int main()
{
    foo f1(0);
    foo f2;
}
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
05.02.2012, 11:14     Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд #12
Цитата Сообщение от silent_1991 Посмотреть сообщение
Так код не скомпилируется,
Почему?
Прототип функции нельзя писать в функции?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
05.02.2012, 11:16     Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд #13
Chelioss, нет-нет)) просто привычка. Редко объявляешь объект, который потом не используешь. Код не скомпилируется при попытке использования объекта fl, который для компилятора будет именем функции.
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
05.02.2012, 11:16     Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд #14
Цитата Сообщение от Chelioss Посмотреть сообщение
Прототип функции нельзя писать в функции?
можно
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
05.02.2012, 11:23  [ТС]     Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд #15
Я сразу сказал - бред всё это =(
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
05.02.2012, 11:24     Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд #16
AnyOne697, да почему? Создавать объект так же:
C++
1
field fl;
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
05.02.2012, 11:26  [ТС]     Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд #17
Он и не думает использовать параметризованный конструктор, даже с параметрами по умолчанию! Вроде...
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
05.02.2012, 11:27     Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд #18
Цитата Сообщение от AnyOne697 Посмотреть сообщение
Вроде...
так "вроде" или нет? Приведи исправленный код
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
05.02.2012, 11:27     Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд #19
AnyOne697, вам Nameless One показал код, который вы, похоже, даже не попытались скомпилировать. Что ж, сделаем это за вас: http://liveworkspace.org/code/e03450...e32c3d136dc1e2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2012, 11:29     Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд
Еще ссылки по теме:

C++ Не очищается экран
C++ Нужно реализовать класс "вектор" с конструкторами, которые позволяют создать нулевой вектор и вектор с произвольным кол-во элементов.
C++ Не очищается динамическая память, codeblocks

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

Или воспользуйтесь поиском по форуму:
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
05.02.2012, 11:29  [ТС]     Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд #20
Странно =/ Видимо я очепятался или компилятор меня...
Yandex
Объявления
05.02.2012, 11:29     Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд
Ответ Создать тему
Опции темы

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