Вопросы по теме '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 просмотров
schedule
04.03.2022
Является ли поведение `new (this) MyClass ();` undefined после прямого вызова деструктора?
В этом моем вопросе @DeadMG говорит, что повторная инициализация класса с помощью указателя this является неопределенным поведением. Есть ли где-нибудь упоминание о нем в стандарте?
Пример:
#include <iostream>
class X{
int _i;...
601 просмотров
schedule
14.03.2022
шаблонное размещение 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 просмотров
schedule
18.01.2024
Как я могу переносимо реализовать выровненное хранилище стека в С++ 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 просмотров
schedule
04.08.2022
Как реализовать простой контейнер с функциями размещения 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 просмотров
schedule
27.04.2022
Определено ли поведение для использования нового размещения для изменения типа переменной, которая хранится в 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 просмотров
schedule
03.08.2023
Размещение нового базового подобъекта производного в C++
Определено ли поведение для размещения-нового тривиально разрушаемого базового объекта производного?
struct base { int& ref; };
struct derived : public base {
complicated_object complicated;
derived(int& r, complicated_arg arg) :...
320 просмотров
schedule
15.09.2022
Почему в С++ 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 просмотров
schedule
22.06.2023
Как избежать создания какого-либо объекта в хранилище, которое занимал автоматический объект const?
Стандарт C ++ (черновик) содержит то, что я называю «предложением о пригодности для использования», то есть [базовый .life] / 10 :
Создание нового объекта в хранилище, которое занимает полный константный объект со статической, потоковой или...
79 просмотров
schedule
11.07.2023