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

Как вызвать конструктор по указателю? - C++

Восстановить пароль Регистрация
 
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.03.2014, 11:20     Как вызвать конструктор по указателю? #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 TBase  *Buffer;
 TBase  *p;
 TBase  *End;
 size_t  NewSize;
 NewSize=Count*sizeof(TBase);
 if ((NewSize/sizeof(TBase))==Count)
 {
  if (Count>this->Count)
  {
   Buffer=(TBase*)realloc((void*)Data, NewSize);
   if (_msize(Buffer)!=NewSize)
   {
    return false;
   }
   for (p=Buffer+Count-1, End=Buffer+this->Count; p>=End; --p)
   {
    // Здесь надо вызвать конструктор для объекта *p
   }
  }
 }
 return true;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 319
Регистрация: 30.03.2009
Сообщений: 14,121
Записей в блоге: 26
02.03.2014, 11:21     Как вызвать конструктор по указателю? #2
Конструктор нельзя вызывать. Он может вызываться только автоматически: либо при создании объекта, либо при вызове new. Т.е. в твоём случае надо воспользоваться конструкцией placement new (если я правильно понял, чего ты хочешь)
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.03.2014, 11:22  [ТС]     Как вызвать конструктор по указателю? #3
Цитата Сообщение от Evg Посмотреть сообщение
Т.е. в твоём случае надо воспользоваться конструкцией placement new
А как?
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 319
Регистрация: 30.03.2009
Сообщений: 14,121
Записей в блоге: 26
02.03.2014, 11:28     Как вызвать конструктор по указателю? #4
Я на Си++ не программирую, синтаксис точно не помню, в твоей программе какой-то огрызок, а потому могу только догадаться, что ты имеешь в виду. Если я догадываюсь правильно, то

C++
1
new (p) TBase;
Добавлено через 36 секунд
Цитата Сообщение от tarasproger Посмотреть сообщение
Здесь надо вызвать конструктор для объекта *p
У тебя нету никакого объекта, т.к. ты его не создавал. У тебя есть указатель, а не объект

Добавлено через 1 минуту
Да, после такого создания объекта деструктор надо вызывать ручками:

C++
1
p->~TBase();
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.03.2014, 11:29  [ТС]     Как вызвать конструктор по указателю? #5
Цитата Сообщение от Evg Посмотреть сообщение
У тебя нету никакого объекта,
Ну разумеется, раз я только собираюсь вызвать конструктор.
Цитата Сообщение от Evg Посмотреть сообщение
т.к. ты его не создавал.
А для чего по-Вашему я собираюсь вызывать конструктор?

Добавлено через 1 минуту
Цитата Сообщение от Evg Посмотреть сообщение
, а потому могу только догадаться, что ты имеешь в виду.
Метод ReSize объекта-массива.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 319
Регистрация: 30.03.2009
Сообщений: 14,121
Записей в блоге: 26
02.03.2014, 11:32     Как вызвать конструктор по указателю? #6
Цитата Сообщение от tarasproger Посмотреть сообщение
А для чего по-Вашему я собираюсь вызывать конструктор?
Для чего ты собираешься вызвать конструктор - я не знаю. Я языке Си++ конструктор занимается инициализацией полей объекта, а вовсе не созданием объекта, как тебе кажется
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.03.2014, 11:36  [ТС]     Как вызвать конструктор по указателю? #7
Ваще то конструктор инициализирует поля объекта для того, чтоб гарантировать правильное создание объекта, которое состоит из выделения памяти и инициализации полей. То, что объект безымянный, принципиального значения не имеет, важней то, что пока только выделена память, но вместо объекта в ней валяется мусор.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 319
Регистрация: 30.03.2009
Сообщений: 14,121
Записей в блоге: 26
02.03.2014, 11:38     Как вызвать конструктор по указателю? #8
Цитата Сообщение от tarasproger Посмотреть сообщение
важней то, что пока только выделена память, но вместо объекта в ней валяется мусор
Важно то, что память выделена, а объекта там нет. Объект появляется только после вызова оператора new, который в процессе своей работы вызовет конструктор
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.03.2014, 11:40  [ТС]     Как вызвать конструктор по указателю? #9
А где можно прочитать точный синтаксис плейсимет нью?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.03.2014, 12:38     Как вызвать конструктор по указателю? #10
Цитата Сообщение от tarasproger Посмотреть сообщение
А где можно прочитать точный синтаксис плейсимет нью?
http://lmgtfy.com/?q=placement+new
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2014, 12:42     Как вызвать конструктор по указателю?
Еще ссылки по теме:

Как вызвать конструктор с параметрами в конструкторе без параметров? C++
C++ Как вызвать другой конструктор для уже созданного объекта конструктором по умолчанию?
Как правильно вызвать конструктор вектора в данном случае? C++

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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.03.2014, 12:42  [ТС]     Как вызвать конструктор по указателю? #11
Ну это то я попробовал до вопроса.
Yandex
Объявления
02.03.2014, 12:42     Как вызвать конструктор по указателю?
Ответ Создать тему
Опции темы

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