выделение памяти в C++

Новый современный способ сделать это - использовать toLocaleDateString , поскольку он не только позволяет форматировать дату с правильной локализацией, вы даже можете передавать параметры форматирования для архивирования желаемого результата:

var date = new Date(2018, 2, 1);
var result = date.toLocaleDateString("en-GB", { // you can skip the first argument
  year: "numeric",
  month: "2-digit",
  day: "2-digit",
});
console.log(result);

Когда вы пропустите первый аргумент, он обнаружит язык браузера. Кроме того, вы также можете использовать 2-digit в опции года

.

Если вам не нужно поддерживать старые браузеры, такие как IE10, это самый чистый способ сделать эту работу. IE10 и более низкие версии не будут понимать аргумент параметров.

8
задан user132349 2 July 2009 в 15:45
поделиться

8 ответов

Произвольные блоки памяти могут быть выделены с помощью оператора new в C ++; не с оператором new , который предназначен для создания объектов.

void* pBlock = ::operator new(7);

Такие блоки впоследствии могут быть освобождены с помощью оператора delete .

::operator delete(pBlock);

Обратите внимание, что оператор new будет выделенная память соответствующим образом выровнена для любого типа объекта, поэтому реализация может не выделять ровно семь байтов и не более, но то же самое (обычно) верно для malloc . Клиенты C malloc обычно также нуждаются в выровненной памяти.

44
ответ дан 5 December 2019 в 04:28
поделиться

Вы не можете выделить указатель void с помощью оператора C ++ new : вам придется выделить явный тип, такой как char или uint8_t :

char *p = new char[7];
uint8_t *q = new uint8_t[7];
...
delete [] p;
delete [] q;
8
ответ дан 5 December 2019 в 04:28
поделиться

Думаю, вы ищете Новое размещение .

2
ответ дан 5 December 2019 в 04:28
поделиться

Да, можно.
Но в зависимости от того, что вы делаете, могут быть лучшие методы.

Не могли бы вы обновить вопрос и рассказать нам, чего вы пытаетесь достичь. С большим контекстом может быть предоставлено лучшее решение.

Пример:
Если вы динамически выделяли буфер для чтения из сокета (поскольку размер неизвестен во время компиляции). Альтернативой было бы использование вектора и его динамическое изменение размера. Затем вы можете получить указатель на внутреннюю часть буфера, взяв адрес первого элемента.

3
ответ дан 5 December 2019 в 04:28
поделиться

Другие ответили на вопрос, как написано, но я хотел бы предложить придерживаться malloc / free для такого выделения.

new и delete предназначены для размещения объектов. Они выделяют необходимую память и вызывают конструкторы / деструкторы. Если вы знаете, что вам просто нужен произвольный блок памяти, использование malloc и free вполне разумно.

11
ответ дан 5 December 2019 в 04:28
поделиться

new char [7];

Традиционно char - это байт, хотя вы можете найти некоторые библиотеки, которые определяют тип BYTE.

2
ответ дан 5 December 2019 в 04:28
поделиться

Вы можете использовать char * pBuffer = new char [7]; , а поскольку sizeof (char) составляет 1 байт, вы можете использовать его как байтовый буфер. Также не забудьте использовать delete [] (с []) при освобождении памяти.

2
ответ дан 5 December 2019 в 04:28
поделиться

Лично я бы использовал std :: vector . Вы не только получаете произвольный блок байтов ( гарантированно непрерывный ), но и получаете их в оболочке RAII. Конечно, нет необходимости использовать какие-либо методы std :: vector (кроме, возможно,

3
ответ дан 5 December 2019 в 04:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: