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

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

Войти
Регистрация
Восстановить пароль
 
Apparat_UA
5 / 5 / 2
Регистрация: 06.01.2015
Сообщений: 172
#1

При выделении памяти через malloc, как создавать объекты ? - C++

10.11.2016, 10:01. Просмотров 281. Ответов 9
Метки нет (Все метки)

Выделяю память через malloc под 4 объекта, как их создать ?
C++
1
2
3
4
5
6
myClass * ptr = (myClass*) malloc(sizeof(myClass)*4);
 
for(int i = 0; i < 4; ++i)
{
    ptr[i] = myClass();
}
так создаются лишние временные экземпляры
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2016, 10:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос При выделении памяти через malloc, как создавать объекты ? (C++):

Ошибка при выделении памяти с помощью malloc - C++
Помогите выдает ошибку в рядочке :&quot;Ar = ( far *)malloc(size*sizeof(int));&quot; полный текст програмы: #include &quot;stdafx.h&quot; using namespace...

Как сделать так чтобы при каждом выделении памяти в методе была возможность ее очистить и вернуть результат? - C++
Доброго времени суток! Есть код класса и хотелось бы устранить в нем следующие недочеты: 1) Как сделать так чтобы при каждом выделении...

Выделение памяти через malloc и считывание данных - C++
Здравствуйте. Имеется файл, в котором 6 чисел типа double. В программе имеется 2 массива. В 1-ый записываю все числа из файла, стоящие на...

Ошибка при выделении памяти - C++
Здравствуйте, друзья. Подскажите, пожалуйста, почему выскакивает ошибка при повторном выделении память (ведь память в куче удаляется...

Ошибка при выделении памяти - C++
Вопрос: из-за чего программа может рушится? int *NRRow = new int ; int *NRow = new int ; int *NCol = new int ; //тут...

Ошибка при выделении памяти - C++
Когда убираю free(buf), то ошибки нету, а когда есть, то вылазит ошибка. Почему такое происходит? #include &lt;stdlib.h&gt; #include...

9
nmcf
5770 / 5081 / 1735
Регистрация: 14.04.2014
Сообщений: 20,793
10.11.2016, 10:04 #2
Для объектов предназначена new - вот и применяй.
0
hoggy
6798 / 2984 / 514
Регистрация: 15.11.2014
Сообщений: 6,754
Завершенные тесты: 1
10.11.2016, 10:05 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Apparat_UA Посмотреть сообщение
так создаются лишние временные экземпляры
http://rextester.com/EFU38347

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
struct myClass
{
    myClass() { std::cout << "ctor\n"; }
    myClass(const myClass&) { std::cout << "copy\n"; }
};
 
int main()
{
    std::cout << "Hello, world!\n";
    
    
    myClass * ptr = (myClass*) malloc(sizeof(myClass)*4);
 
    for(int i = 0; i < 4; ++i)
        new(ptr + i) myClass;
}
1
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4138 / 2269 / 561
Регистрация: 18.10.2014
Сообщений: 3,881
10.11.2016, 11:04 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
myClass *ptr = (myClass *) malloc(4 * sizeof *ptr);
std::uninitialized_fill_n(ptr, 4, myClass());
а в С++17

C++
1
2
myClass *ptr = (myClass *) malloc(4 * sizeof *ptr);
std::uninitialized_default_construct_n(ptr, 4);
2
Apparat_UA
5 / 5 / 2
Регистрация: 06.01.2015
Сообщений: 172
10.11.2016, 13:37  [ТС] #5
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
std::uninitialized_fill_n(ptr, 4, myClass());
Есть подобная функция для удаления потом этих объектов ?
0
Martein
675 / 86 / 13
Регистрация: 22.06.2014
Сообщений: 178
10.11.2016, 14:14 #6
TheCalligrapher, что-то на gcc 6.2.1 x86_64 (Arch Linux) не включается стандарт C++17. так должно быть, не знаете?
0
DrOffset
7506 / 4502 / 1023
Регистрация: 30.01.2014
Сообщений: 7,362
10.11.2016, 15:59 #7
Цитата Сообщение от Martein Посмотреть сообщение
не включается стандарт C++17
Хочешь сказать ключ -std=c++1z не работает?
А вообще, конкретной возможности может еще не быть. Надо сверяться с информацией с сайта: https://gcc.gnu.org/projects/cxx-status.html#cxx1z
0
Croessmah
Пришел
Эксперт CЭксперт С++
13759 / 7840 / 893
Регистрация: 27.09.2012
Сообщений: 19,254
Записей в блоге: 3
Завершенные тесты: 1
10.11.2016, 16:18 #8
Цитата Сообщение от Apparat_UA Посмотреть сообщение
Есть подобная функция для удаления потом этих объектов ?
std::destroy,
std::destroy_n,
std::destroy_at.
Цитата Сообщение от Martein Посмотреть сообщение
что-то на gcc 6.2.1 x86_64
Если интересно, то могу на gcc 7.0 попробовать вечером.
0
Martein
675 / 86 / 13
Регистрация: 22.06.2014
Сообщений: 178
11.11.2016, 00:09 #9
DrOffset, ну он проглатывает этот ключ, но компилировать не соглашается эти функции.
0
DrOffset
7506 / 4502 / 1023
Регистрация: 30.01.2014
Сообщений: 7,362
11.11.2016, 08:21 #10
Цитата Сообщение от Martein Посмотреть сообщение
но компилировать не соглашается эти функции.
Ну тогда:
Цитата Сообщение от DrOffset Посмотреть сообщение
конкретной возможности может еще не быть. Надо сверяться с информацией с сайта
см. тут: https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html
Эти функции относятся к пункту "Extending memory management tools", реализация документа P0040R3. Судя по таблице, данная функциональность доступна только с 7й версии.
0
11.11.2016, 08:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2016, 08:21
Привет! Вот еще темы с ответами:

Ошибка при динамическом выделении памяти - C++
Я не понимаю почему, но почему-то пример по динамическому выделению памяти, взятый с этой веб-страницы: http://cppstudio.com/post/9555/...

Ошибка при динамическом выделении памяти - C++
почему у меня возникет ошибка вот тут struct TOVAR *New = new struct TOVAR; пишит недопустимый неполный тип на struct подчеркивает...

Создание исключения при динамическом выделении памяти - C++
Вот код из учебника в нем мне все понятно. #include&lt;iostream&gt; #include&lt;cstdlib&gt; //exit() #include&lt;new&gt; using std::cout;using...

Вылет при выделении памяти под вектор - C++
Пишу на С++. Создаю vector&lt;float&gt;. Преждевременно выделяю под него место с помощью resize. Нужно выделить 640381050 элементов. В итоге...


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

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

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