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

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

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

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

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

Нюансы синтаксиса: как вызвать функцию по указателю? - 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++
#include <iostream> #include <fstream> #include <map> #include <vector> #include <string> using namespace std; typedef...

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

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

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

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

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

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

Добавлено через 1 минуту
Цитата Сообщение от Evg Посмотреть сообщение
, а потому могу только догадаться, что ты имеешь в виду.
Метод ReSize объекта-массива.
Evg
Эксперт CАвтор FAQ
17542 / 5780 / 370
Регистрация: 30.03.2009
Сообщений: 15,920
Записей в блоге: 26
02.03.2014, 11:32     Как вызвать конструктор по указателю? #6
Цитата Сообщение от tarasproger Посмотреть сообщение
А для чего по-Вашему я собираюсь вызывать конструктор?
Для чего ты собираешься вызвать конструктор - я не знаю. Я языке Си++ конструктор занимается инициализацией полей объекта, а вовсе не созданием объекта, как тебе кажется
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.03.2014, 11:36  [ТС]     Как вызвать конструктор по указателю? #7
Ваще то конструктор инициализирует поля объекта для того, чтоб гарантировать правильное создание объекта, которое состоит из выделения памяти и инициализации полей. То, что объект безымянный, принципиального значения не имеет, важней то, что пока только выделена память, но вместо объекта в ней валяется мусор.
Evg
Эксперт CАвтор FAQ
17542 / 5780 / 370
Регистрация: 30.03.2009
Сообщений: 15,920
Записей в блоге: 26
02.03.2014, 11:38     Как вызвать конструктор по указателю? #8
Цитата Сообщение от tarasproger Посмотреть сообщение
важней то, что пока только выделена память, но вместо объекта в ней валяется мусор
Важно то, что память выделена, а объекта там нет. Объект появляется только после вызова оператора new, который в процессе своей работы вызовет конструктор
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.03.2014, 11:40  [ТС]     Как вызвать конструктор по указателю? #9
А где можно прочитать точный синтаксис плейсимет нью?
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 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++
как вызвать конструктор? std::cout << "7) Вызов конструктора;"<<std::endl; case '7' : что нужно ввести что бы...

Вызвать конструктор в поле класса - C++
Хай class ac { public: int a; ac(int c) { a = c; } ac() {};

Вызвать конструктор произвольного класса в другом классе - C++
Здравствуйте! Есть необходимость вызвать конструктор какого-либо класса в методе другого класса. Примерно так: class A{}; class B:...

Выделить память под несколько элементов + вызвать конструктор для каждого - C++
Всем привет! Есть некий класс MyClass...., у него есть конструктор MyClass::MyClass (float); Я объявляю указатель: MyClass...


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

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

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