Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Что это за компонент? https://www.cyberforum.ru/ cpp/ thread300352.html
Всем привет. Кто ни будь, знает в какой библиотеке есть компоненты: TLight и TTrend ? Знакомы ли вообще такие названия кому ни будь?
Visual C++ и Builder C++ сильно отличаются друг от друга? C++
Доброго времени суток. У меня такой вопрос, Visual C++ и Builder C++ сильно отличаются друг от друга? Например если прога была написана в Visual, то будет ли она корректно работать в Builder?
Комментарий в коде C++
как в С++ делать коментр?? в паскале так: { bla bla} а в С++ как???
C++ Списки, динамическая память и указатели Нужна помощь! Требуется написать функцию rearrangment( ), меняющую i-ю и j-ю строки текста. То бишь нужно создать однонаправленный список, в который заносится построчно текст какой-либо уже... https://www.cyberforum.ru/ cpp/ thread298945.html
C++ Найти решение - на разные темы https://www.cyberforum.ru/ cpp/ thread298385.html
Доброго времени суток!!! Уважаемые форумчанины, требуется помощь в решении задач по С++. За 1,5 месяца не смог разобраться ни в одном компиляторе. У меня видимо руки не оттуда растут, или эти...
C++ После всякиго ли компилятора c++ будут гарантирвоано правильно исполняться код, соответствющий этим строкам?
После всякиго ли компилятора c++ будут гарантирвоано правильно исполняться код, соответствующий этим: a=a; // Удвоение a*=a; // Возведение в квадрат строкам. 1. На сколько надёжно компилится...
C++ C++ и принтеры
Приветствую уважаемые программисты! У меня есть сканер и принтер, и достаточно много документов которые нужно ксерить. Просто нажимать "сканировать", потом "печать" уже надоело. Появилась идея...
C++ Перезагрузка программы с заданными входными параметрами Добрый день. В общем есть программа, которая на вход получает имя файла конфигурации. Нужно ее програмно перезагрузить, указав имя нужного файла конфигурации. Кто нибудь знает методы, позволяющие это... https://www.cyberforum.ru/ cpp/ thread296064.html
C++ Windows Driver Kit https://www.cyberforum.ru/ cpp/ thread296009.html
Здравствуйте. ОС Windows 7 Максимальная 32bit. Отсюда качал Windows Driver Kit 7.1.0. Образ запускал в DAEMON Tools Lite 4.35 (работает без сбоев). Антивирус DrWeb выключал - не помогает. При...
C++ Событие FormClosed У меня есть две формы (Form1 и Form2). Мне нужно, чтобы при закрытии Form2, в Form1 происходили определенные действия. Я пытался создать обработчик закрытия Form2(FormClosed) в классе Form1, но у... https://www.cyberforum.ru/ cpp/ thread294008.html
186 / 173 / 18
Регистрация: 22.03.2010
Сообщений: 612
21.05.2011, 07:57  [ТС] 0

realloc и вызов конструктора

21.05.2011, 07:57. Просмотров 20209. Ответов 35
Метки (Все метки)

Ответ

посмотрите, что я нашёл: http://ru.wikipedia.org/wiki/New_(C%2B%2B)

а именно следующее:

Placement new

Существует особая форма оператора new, называемая Placement new. Данный оператор не выделяет память, а получает своим аргументом адрес на уже выделенную каким-либо образом память (например, на стеке или через malloc). Происходит размещение (инициализация) объекта путем вызова конструктора, и объект создается в памяти по указанному адресу.
видимо это мой препод и имел ввиду. Странно, что никто не упоминул этот вариант, я правда свою прогу уже переписывать не буду, но так как это относится к теме, то я нашёл более подробную статью:
[11.10] Что такое "синтаксис размещения" new ("placement new") и зачем он нужен?

Есть много случаев для использования синтаксиса размещения для new. Самое простое - вы можете использовать синтаксис размещения для помещения объекта в определенное место в памяти. Для этого вы указываете место, передавая указатель на него в оператор new:


#include <new> // Необходимо для использования синтаксиса размещения
#include "Fred.h" // Определение класса Fred

void someCode()
{
char memory[sizeof(Fred)]; // #1
void* place = memory; // #2

Fred* f = new(place) Fred(); // #3 (смотрите "ОПАСНОСТЬ" ниже)
// Указатели f и place будут равны

// ...
}
В строчке #1 создаётся массив из sizeof(Fred) байт, размер которого достаточен для хранения объекта Fred. В строчке #2 создаётся указатель place, который указывает на первый байт массива (опытные программисты на С наверняка заметят, что можно было и не создавать этот указатель; мы это сделали лишь чтобы код был более понятным [As if - YM]). В строчке #3 фактически происходит только вызов конструктора Fred::Fred(). Указатель this в конструкторе Fred будет равен указателю place. Таким образом, возвращаемый указатель тоже будет равен place.

СОВЕТ: Не используйте синтаксис размещения new, за исключением тех случаев, когда вам действительно нужно, чтобы объект был размещён в определённом месте в памяти. Например, если у вас есть аппаратный таймер, отображённый на определённый участок памяти, то вам может понадобиться поместить объект Clock по этому адресу.

ОПАСНО: Используя синтаксис размещения new вы берёте на себя всю ответственность за то, что передаваемый вами указатель указывает на достаточный для хранения объекта участок памяти с тем выравниванием (alignment), которое необходимо для вашего объекта. Ни компилятор, ни библиотека не будут проверять корректность ваших действий в этом случае. Если ваш класс Fred должен быть выровнен четырёхбайтовой границе, но вы передали в new указатель на не выровненный участок памяти, у вас могут быть большие неприятности (если вы не знаете, что такое "выравнивание" (alignment), пожалуйста, не используйте синтаксис размещения new). Мы вас предупредили.

Также на вас ложится вся ответственность по уничтожения размещённого объекта. Для этого вам необходимо явно вызвать деструктор:


void someCode()
{
char memory[sizeof(Fred)];
void* p = memory;
Fred* f = new(p) Fred();
// ...
f->~Fred(); // Явный вызов деструктора для размещённого объекта
}
Это практически единственный случай, когда вам нужно явно вызывать деструктор.
спасибо сайту http://faqs.org.ru/progr/c_cpp/cpp_lite3.htm и конечно google.com

Вернуться к обсуждению:
realloc и вызов конструктора
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2011, 07:57

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Вызов базового конструктора
Такая вот ситуация. Думаю, проблема в объявлении и инициализации массива m. Я бы инициализировал...

Неоднозначный вызов конструктора
class Verylong{ public: Verylong (long x = 0) { enter(x);} Verylong (const...

Вызов копирующего конструктора
Помогите привести примеры для всех случаев.. Копирующий конструктор вызывается в следующих...

Вызов конструктора с аргументами
есть класс приложения test_proj в интерфейсе класса в файле test_proj.h создается объект класса...

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