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

Как работает динамическое выделение памяти под объект? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Возврат объекта класса из функции http://www.cyberforum.ru/cpp-beginners/thread808745.html
Имеется следующий код: #include "stdafx.h" #include <iostream> using namespace std; /*Задача: Определить класс список элементов. В определение класса включить два конструктора для...
C++ Описать класс Матрица Описать класс Матрица. C++ http://www.cyberforum.ru/cpp-beginners/thread808735.html
C++ Производные
Привет всем! У меня такая проблема: надо написать программку, которая бы выдала вид прозводной, например, на вход подается f=y*x-2*y^2, необходимо производную по у написать, на выходе должно...
C++ Непонятки со списком
Нашёл код в интернете и немного не понимаю его в некоторых местах. Объясните мне пожалуйста, зачем в коде вот тут: strcpy(spis->data,"0"); // инициализируем его данными spis->next = NULL; ...
C++ поиск обратной матрицы http://www.cyberforum.ru/cpp-beginners/thread808728.html
дана матрица A(почти матрица гильберта-отличается только 1-ая строчка): 1 1 1 1... 1/2 1/3 1/4 1/5... 1/3 1/4 1/5 1/6... ............................. нужно найти...
C++ Найти количесво четных элементов матрицы Нужно найти количество четных элементов матрицы в каждой строчке. Написала код, по идее ответ должен быть таким сумма=1,сумма=2,сумма=3. а вылезает сумма=1,сумма=1,сумма=1 помогите,... подробнее

Показать сообщение отдельно
mzarb
-211 / 7 / 1
Регистрация: 14.01.2013
Сообщений: 141

Как работает динамическое выделение памяти под объект? - C++

14.03.2013, 19:58. Просмотров 949. Ответов 11
Метки (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class A
{
public:
  A(int x){}
  ~A(){}
};
const int n = 50;
A* placementMemory = static_cast<A*>(operator new[] (n * sizeof(A)));
for (int i = 0; i < n; i++)
{
  new (placementMemory + i) A(rand());
}
for (int i = 0; i < n; i++)
{
  placementMemory[i].~A();
}
operator delete[] (placementMemory);
В 8 строчке вызвалась перегруженная глобальная функция "operator new[]", потом эта функция приняла аргументом размер для выделения памяти для 50 объектов размера "A" и вернула указатель на эту выделенную память, дальше static_cast привел этот указатель к типу "A" и присвоил значения(адрес на выделенную память, который содержался в указателе) указателя к указателю placementMemory.
Но вот не пойму, что происходить в 11 строчке. Какая будет использоваться перегруженная версия new и она там будет не одна? Я так же не понимаю такой пример : A *p = new A;. Сначала вызывается new и выделяется память и возвращается указатель на эту выделенную память, а потом запускается конструктор класса A(), но кто будет инициализировать этот конструктор на этой динамически выделенной памяти(указатель на которую вернула new), а не на стеке, ведь new вернула только указатель на выделенную память и не понятно каким образом конструктор должен на этой выделенной памяти инициализироваться?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru