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

Создание экземпляра структуры из буфера указателя void
Вот код на C++, который мне кажется забавным, но я знаю, что он работает. Определена структура, и в программе мы выделяем память с помощью указателя void. Затем структура создается с использованием выделенного буфера. Вот код typedef...
1383 просмотров

размещение новое + массив + выравнивание
SomeObj<unsigned int>* Buffer; char* BufferPtr = MemoryManager::giveMeSomeBytes(resX*resY*sizeof(SomeObj<unsigned int>)); Buffer = new(BufferPtr) SomeObj<unsigned int>[resX*resY]; когда я перехожу эти строки с помощью...
6990 просмотров

массив символов как хранилище для размещения новых
Является ли следующий допустимый C ++ четко определенным поведением? class my_class { ... }; int main() { char storage[sizeof(my_class)]; new ((void *)storage) my_class(); } Или это проблематично из-за соображений приведения /...
2409 просмотров
schedule 23.03.2023

удалить это и разместить новый виртуально производный класс
class base { int a; protected: template<class T> class derived; public: base() {} virtual ~base() {} virtual void func() {} static base* maker(); }; template <class T> class base::derived : public...
617 просмотров
schedule 30.01.2023

Новое размещение массива требует неопределенных накладных расходов в буфере?
5.3.4 [expr.new] черновика C ++ от 11 февраля дает пример: new(2,f) T[5] вызывает вызов operator new[](sizeof(T)*5+y,2,f) . Здесь x и y - неотрицательные неопределенные значения, представляющие накладные расходы на выделение массива;...
6631 просмотров

Размещение new в памяти, возвращаемое new и new[]
Ниже мой тестовый класс: - class Base { public: int data; Base(int x) : data(x) {} }; Теперь я использую новое размещение для создания объектов в уже выделенной памяти: - ДЕЛО 1:- void* raw = operator new(4* sizeof(Base));...
99 просмотров
schedule 30.11.2022

Реализация std::experimental::Optional‹T›: путаница с конструктором Constexpr
При реализации std::experimental::optional ( cppreference.com ) я получил смущает спецификация конкретного конструктора, а именно: constexpr optional( const T& value ); // (4) ( Источник ) Этот конструктор позволяет создавать...
442 просмотров
schedule 29.04.2023

Сбой размещения нового при использовании с виртуальной иерархией наследования в Visual C ++
Я использую виртуальное наследование с выбором классов в C ++. В настоящее время происходит сбой при разрушении. Кажется, он отлично компилируется в онлайн-компиляторах, однако, когда я запускаю в Visual Studio, он дает сбой. У меня есть чистый...
422 просмотров

Разрешено ли явно вызывать деструктор с последующим размещением new в переменной с фиксированным временем жизни?
Я знаю, что явный вызов деструктора может привести к неопределенному поведению из-за двойного вызова деструктора, как здесь: #include <vector> int main() { std::vector<int> foo(10); foo.~vector<int>(); return 0; // Oops,...
1079 просмотров

Реализация контейнера в виде массива против строгого псевдонима
Я пытаюсь реализовать контейнер, похожий на массив, с некоторыми особыми требованиями и подмножеством интерфейса std::vector . Вот фрагмент кода: template<typename Type> class MyArray { public: explicit MyArray(const uint32_t size) :...
84 просмотров

деструктор при размещении-новый
Существует ли шаблон для автоматического вызова деструктора placement-new инициализированного объекта в стеке, когда он выходит из области видимости? Я хочу пропустить необходимость запоминать явный вызов деструктора. Или есть другой метод, чем...
143 просмотров
schedule 13.01.2023

Повторное использование хранилища элементов данных путем размещения нового во время жизни включающего объекта
Это продолжение моего предыдущего вопроса , где я, кажется, сделал проблему более сложной, чем предполагал изначально. (См. Обсуждения в вопросе и ответы на комментарии там.) Этот вопрос представляет собой небольшую модификацию исходного вопроса,...
251 просмотров