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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
#1

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

02.03.2014, 11:20. Просмотров 486. Ответов 10
Метки нет (Все метки)

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;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2014, 11:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как вызвать конструктор по указателю? (C++):

Нюансы синтаксиса: как вызвать функцию по указателю? - C++
подскажите,как вызвать ф-цию ) int f(int&a, int&b) { return (a*b); } int main() { int a=6,b=5;

как вызвать конструктор? - C++
class t_figure { protected: int m_hor; // цифра по горизонтали char m_vert; // буква по вертикали int m_color; // цвет... ...

Как вызвать нужный конструктор - C++
Пожалуйста, подскажите, как вызвать нужный конструктор в зависимости от того, какие поля заполняет пользователь и какие пропускает? ...

Как вызвать конструктор для неизвестного объекта? - C++
Добрый вечер. Помогите мне с задачей. Хочу написать шаблонный класс вектор. И в конструкторе по умолчанию нужно прописать конструкцию...

Как вызвать конструктор с параметрами в конструкторе без параметров? - C++
Как вызвать конструктор с параметрами в конструкторе без параметров? То есть что бы конструктор с параметрами выступал в роли основного. В...

Как правильно вызвать конструктор вектора в данном случае? - C++
#include <iostream> #include <fstream> #include <map> #include <vector> #include <string> using namespace std; typedef...

10
Evg
Эксперт CАвтор FAQ
18026 / 6258 / 427
Регистрация: 30.03.2009
Сообщений: 17,190
Записей в блоге: 27
02.03.2014, 11:21 #2
Конструктор нельзя вызывать. Он может вызываться только автоматически: либо при создании объекта, либо при вызове new. Т.е. в твоём случае надо воспользоваться конструкцией placement new (если я правильно понял, чего ты хочешь)
1
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.03.2014, 11:22  [ТС] #3
Цитата Сообщение от Evg Посмотреть сообщение
Т.е. в твоём случае надо воспользоваться конструкцией placement new
А как?
0
Evg
Эксперт CАвтор FAQ
18026 / 6258 / 427
Регистрация: 30.03.2009
Сообщений: 17,190
Записей в блоге: 27
02.03.2014, 11:28 #4
Я на Си++ не программирую, синтаксис точно не помню, в твоей программе какой-то огрызок, а потому могу только догадаться, что ты имеешь в виду. Если я догадываюсь правильно, то

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

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

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

Добавлено через 1 минуту
Цитата Сообщение от Evg Посмотреть сообщение
, а потому могу только догадаться, что ты имеешь в виду.
Метод ReSize объекта-массива.
0
Evg
Эксперт CАвтор FAQ
18026 / 6258 / 427
Регистрация: 30.03.2009
Сообщений: 17,190
Записей в блоге: 27
02.03.2014, 11:32 #6
Цитата Сообщение от tarasproger Посмотреть сообщение
А для чего по-Вашему я собираюсь вызывать конструктор?
Для чего ты собираешься вызвать конструктор - я не знаю. Я языке Си++ конструктор занимается инициализацией полей объекта, а вовсе не созданием объекта, как тебе кажется
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.03.2014, 11:36  [ТС] #7
Ваще то конструктор инициализирует поля объекта для того, чтоб гарантировать правильное создание объекта, которое состоит из выделения памяти и инициализации полей. То, что объект безымянный, принципиального значения не имеет, важней то, что пока только выделена память, но вместо объекта в ней валяется мусор.
0
Evg
Эксперт CАвтор FAQ
18026 / 6258 / 427
Регистрация: 30.03.2009
Сообщений: 17,190
Записей в блоге: 27
02.03.2014, 11:38 #8
Цитата Сообщение от tarasproger Посмотреть сообщение
важней то, что пока только выделена память, но вместо объекта в ней валяется мусор
Важно то, что память выделена, а объекта там нет. Объект появляется только после вызова оператора new, который в процессе своей работы вызовет конструктор
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.03.2014, 11:40  [ТС] #9
А где можно прочитать точный синтаксис плейсимет нью?
0
Jupiter
Каратель
Эксперт С++
6558 / 3979 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.03.2014, 12:38 #10
Цитата Сообщение от tarasproger Посмотреть сообщение
А где можно прочитать точный синтаксис плейсимет нью?
http://lmgtfy.com/?q=placement+new
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.03.2014, 12:42  [ТС] #11
Ну это то я попробовал до вопроса.
0
02.03.2014, 12:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2014, 12:42
Привет! Вот еще темы с ответами:

Как правильно создать и вызвать конструктор для массива объектов? - C++
Сам класс class Planet{ public: string name; protected: double diameter; private: int sputniks, number, distance; public: ...

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

Передача std::vector в конструктор[по ссылке\указателю ?] - C++
Доброго времени суток. Есть такой интерфейс класса: class HH_model_class { private: std::vector<double> parameters; ...

вызвать конструктор - C++
как вызвать конструктор? std::cout << "7) Вызов конструктора;"<<std::endl; case '7' : что нужно ввести что бы...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru