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

Определение объекта, который вызвает конструктор. - C++

Восстановить пароль Регистрация
 
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
15.03.2011, 18:33     Определение объекта, который вызвает конструктор. #1
Привет!
Подскажите пожалуйста, как определить, какой из объектов в программе (программа очень большая и писал ее не я) вызывает конструктор класса!?
Класс имеет 2 конструктора.
Один на объект с параметрами, второй на объект без параметров.
Найдено было 2 объекта - оба с параметрами.
Но один раз, вызывается конструктор без параметра, из чего следует, что где-то есть объект без параметра.
Вопрос:
Можно ли в отладчике сделать "шаг назад"?
Про поиск по названию класса знаю, да.

Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2011, 18:33     Определение объекта, который вызвает конструктор.
Посмотрите здесь:

C++ Проинициализировать класс массивов который имеет конструктор по умолчанию
Как называется и что означает такая форма объявления объекта (конструктор) C++
C++ Как вызвать конструктор для неизвестного объекта?
Напишите конструктор для инициализации объекта класса Time, который может использовать текущее время, возвращаемое функцией time (). C++
Почему конструктор вызывается при присвоении объекта другому объекту C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HighPredator
 Аватар для HighPredator
5341 / 1724 / 320
Регистрация: 10.12.2010
Сообщений: 5,107
Записей в блоге: 3
15.03.2011, 19:43     Определение объекта, который вызвает конструктор. #2
Цитата Сообщение от half-node Посмотреть сообщение
Но один раз, вызывается конструктор без параметра, из чего следует, что где-то есть объект без параметра.
Вы сделали неверный вывод. Вполне могло быть так что конструктор без параметров был вызван не на этапе объявления переменной, а в качестве скажем "принудительной процедуры зануления". На своей практике очень часто встречал такой способ очистки объекта. Рекомендую вам привести код, иначе это превратится о в абстрактные рассуждения.
garikkk1
-51 / 0 / 0
Регистрация: 28.02.2011
Сообщений: 44
15.03.2011, 21:25     Определение объекта, который вызвает конструктор. #3
именно!
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
16.03.2011, 16:29  [ТС]     Определение объекта, который вызвает конструктор. #4
А код чего, собственно, выложить?
Код конструктора? Пожалуйста (хотя я слабо себе представляю, чем он поможет в разрезе моего вопроса )
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// конструктор с параметром
CMyIniFile(const char* FileName)
{
   // обработка командной строки на наличие параметров и открытия соответствующего ini файла
   // если параметров нет, открывается файл лежащий в CurrentDir с именем FileName
}
// конструктор без параметра
CMyIniFile()
{
   CMyCurDir m_CurDir;  // определение рабочей дирректории
   m_IniFileName = m_CurDir;
   m_IniFileName += "\\";
   m_IniFileName += "Settings";
   m_IniFileName += ".ini";
}
Вот прям так и написано. Повторюсь, писал не я. )
Весь код нет возможности выложить вовсе, там десятки файлов, по 500-3000 строк.

Соответственно, создается некоторый объект:
C++
1
2
CMyIniFile m_ini("params.ini");
CMyIniFile m_iniTest("paramsTest.ini");
В общем вызывался конструктор без параметров. Тот объект я уже нашел.
Вопрос в том, можно ли как-то узнать в режиме отладки, какой из объектов вызвал конструктор?
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16821 / 5242 / 318
Регистрация: 30.03.2009
Сообщений: 14,118
Записей в блоге: 26
16.03.2011, 16:40     Определение объекта, который вызвает конструктор. #5
Цитата Сообщение от half-node Посмотреть сообщение
Подскажите пожалуйста, как определить, какой из объектов в программе (программа очень большая и писал ее не я) вызывает конструктор класса!?
Поставить брейкпоинт в нужном конструкторе, запустить, если реально туда попадём, то в точке остановки посмотреть стек
Yandex
Объявления
16.03.2011, 16:40     Определение объекта, который вызвает конструктор.
Ответ Создать тему
Опции темы

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