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

Выделение памяти под массив объектов без вызова конструктора - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Не получается вынести класс в отдельный файл http://www.cyberforum.ru/cpp-beginners/thread909053.html
Добрый вечер. Не получается вынести код в отдельный файл. есть заголовочный файл, и есть файл с методами. При компиляции выдает ошибку "error C2011: cTGA: переопределение типа "class"". Опыта работы с C++ мало, поэтому не могу разобраться в чем проблема. Помогите пожалуйста. Вот исходный код: cTGA.h: #pragma once #include "stdafx.h" class cTGA { public: cTGA() { //конструктор
C++ Разработать функцию f(a,b), которая по катетам a и b вычисляет гипотенузу Разработать функцию f(a,b), которая по катетам a и b вычисляет гипотенузу.С помощью данной функции найти периметр фигуры ABCD по заданным сторонам AB,AC,DC. http://www.cyberforum.ru/cpp-beginners/thread909049.html
C++ "iD3DFont" не определен
не могу найти SDK для iD3DFont вот тут пытаюсь использовать for(int i = 0; i < ModelInfo.size(); i++) { iD3DFont.Draw(ModelInfo.X,ModelInfo.Y,ModelInfo.Name,D3DCOLOR_XRGB(255,0,0)); } может кто подскажет, где найти?
СЛАУ на C++ с использованием ООП C++
Помогите пожалуйста, у самой ничего не получается. Нужно написать программу по подсчету системы линейных уравнений третьего порядка с использованием ООП (классы и пр.), метод решения любой (Гаусс/Крамер).
C++ Hash - таблица http://www.cyberforum.ru/cpp-beginners/thread909020.html
Собственно всегда считал, что map - обычная хеш-таблица, оказалось нет, это какое-то древовидная упорядоченная хэш-таблица (без понятия, как это, но в общем сложность O(logN) на вставку, удаление и поиск. Для моей задачи было бы предпочтительнее использовать обычную хеш-таблицу со сложностью O(1). Вопрос: есть ли она (хеш-таблица с O(1) ) в STL и что за "древовидная упорядоченная" map?...
C++ Обращание к функции Обращание к функции называют её… подробнее

Показать сообщение отдельно
ValeryS
Модератор
6537 / 5003 / 460
Регистрация: 14.02.2011
Сообщений: 16,636
21.06.2013, 21:45     Выделение памяти под массив объектов без вызова конструктора
Цитата Сообщение от Ryabchik Посмотреть сообщение
Можно ли сперва выделить память, а затем инициализировать объекты?
Цитата Сообщение от Ryabchik Посмотреть сообщение
Насколько я знаю, при выделении памяти под массив объектов, для каждого из них вызывается конструктор.
не совсем
конструктор вызывает new а если выделять malloc то никак конструкторов не будет
А для чего это надо
Цитата Сообщение от Ryabchik Посмотреть сообщение
Спасибо,а все таки, что делает этот магический код?
placement new как раз и делает то что тебе нужно
цитата из вики
Существует особая форма оператора new, называемая Placement new. Данный оператор не выделяет память, а получает своим аргументом адрес на уже выделенную каким-либо образом память (например, на стеке или через malloc). Происходит размещение (инициализация) объекта путем вызова конструктора, и объект создается в памяти по указанному адресу. Часто такой метод применяют, когда у класса нет конструктора по умолчанию и при этом нужно создать массив объектов. Пример вызова выглядит следующим образом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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);
Добавлено через 1 минуту
Цитата Сообщение от Croessmah Посмотреть сообщение
выделяет память для объектов,
кто выделяет? placement new?
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru