Вопросы по теме 'placement-new'

Правомерность использования оператора удаления для указателя, полученного при размещении нового
Я чертовски уверен, что этот код должен быть незаконным, поскольку он явно не будет работать, но, похоже, он разрешен C++0x FCD. class X { /* ... */}; void* raw = malloc(sizeof (X)); X* p = new (raw) X(); // according to the standard, the RHS is a...
1173 просмотров

Является ли поведение `new (this) MyClass ();` undefined после прямого вызова деструктора?
В этом моем вопросе @DeadMG говорит, что повторная инициализация класса с помощью указателя this является неопределенным поведением. Есть ли где-нибудь упоминание о нем в стандарте? Пример: #include <iostream> class X{ int _i;...
601 просмотров

шаблонное размещение new и деструктор
почему это не компилируется? template <typename T> class Pool{ char Buff[sizeof(T)*256]; public: Pool(){ T* item = reinterpret_cast<T*>(&Buff[0]); for(int i =0 ; i<256;i++) item[i] =...
1037 просмотров

Как я могу переносимо реализовать выровненное хранилище стека в С++ 03?
В коде C++03, как мне переносимо реализовать буфер unsigned char[sizeof(T)] , который имеет тот же размер и выравнивание, что и у заданного типа T ? Например: template<class T> void test() { unsigned char buffer[sizeof(T)]; //...
612 просмотров
schedule 02.11.2022

Использование оператора new и оператора delete с настраиваемым пулом / распределителем памяти
Я работаю над реализацией пула памяти / распределителя памяти и настраиваю его в поместье, где из пула может извлекаться только объект особого типа «Клиент». Клиент может быть либо построен непосредственно в пуле, либо он может используйте пул для...
10107 просмотров

Как реализовать простой контейнер с функциями размещения new и emplace?
Мне нужно реализовать контейнер для хранения некоторого количества элементов, и по какой-то причине он должен работать без выделения кучи. Другое требование состоит в том, что элементы контейнера нельзя копировать или перемещать каким-либо образом....
6589 просмотров
schedule 20.07.2023

Как работает новое размещение C++?
Этот вопрос должен подтвердить, что я правильно понял концепцию, и получить экспертное мнение о стиле использования и возможной оптимизации. Я пытаюсь понять «размещение нового», и ниже приведена программа, которую я придумал... #include...
3009 просмотров
schedule 05.06.2022

Выделение и освобождение памяти С++
Я пытаюсь реализовать класс массива, который может иметь динамический размер, и он будет выделять память без инициализации значений. Мой вопрос касается того, как я освобождаю память позже: Могу ли я реализовать свой код таким образом?:...
107 просмотров
schedule 03.07.2023

Перегрузка глобального размещения Новое?
Я читал другие сообщения (один пример: Как я мог разумно перегрузить оператор размещения new ? ), что стандарт C++ запрещает перегружать глобальное размещение new. GCC выдал ошибку, когда я определил: void* operator new(size_t sz, void*) {...
298 просмотров

Определено ли поведение для использования нового размещения для изменения типа переменной, которая хранится в reference_wrapper?
Я возился с новым размещением и сделал этот код: #include <iostream> #include <functional> #include <new> int main() { char memory[sizeof(int)]; //memory to hold type auto ref = std::ref(*new (memory) int{5});...
304 просмотров

Размещение нового базового подобъекта производного в C++
Определено ли поведение для размещения-нового тривиально разрушаемого базового объекта производного? struct base { int& ref; }; struct derived : public base { complicated_object complicated; derived(int& r, complicated_arg arg) :...
320 просмотров

Почему в С++ 17 нет std::construct_at?
C++17 добавляет std::destroy_at , но не имеет аналога std::construct_at . Почему это? Разве это не могло быть реализовано так просто, как показано ниже? template <typename T, typename... Args> T* construct_at(void* addr,...
3871 просмотров
schedule 11.10.2022

Что делать, если деструктор не вызывается после размещения нового [дубликата]
Я изучаю, как использовать новое размещение в С++, и я нахожу пример, как показано ниже: int main() { // buffer on stack unsigned char buf[100]; // using placement new Complex *pe = new (buf) Complex(2.6, 3.9);...
52 просмотров

Как избежать создания какого-либо объекта в хранилище, которое занимал автоматический объект const?
Стандарт C ++ (черновик) содержит то, что я называю «предложением о пригодности для использования», то есть [базовый .life] / 10 : Создание нового объекта в хранилище, которое занимает полный константный объект со статической, потоковой или...
79 просмотров