systems Аркадия Мясникова. В главе Memory managment он приводит класс, который берёт указатель на область памяти и размер для того, чтобы использовать его в качестве статического буфера. В конструкторе он использует placement new, чтобы "разместить" там массив. Я не могу понять, зачем использовать placement new и почему нельзя использовать указатель на прямую? Почему такой способ безопаснее?
'class MemoryRegion {
public:
MemoryRegion(const char *name, uintptr_t address, size_t size) :
name(name), address(address), size(size) {
data = new (reinterpret_cast<void*>(address)) uint8_t[size];
}
size_t getSize() const {
return size;
}
const char* getName() const {
return name;
}
uintptr_t getAddress() const {
return address;
}
protected:
const char *name;
uintptr_t address;
size_t size;
uint8_t *data;
};
placement new мог бы быть нужен для того, чтобы вызвать конструкторы элементов массива. у uint8_t конструкторов нет, так что и смысла нет
Указатель на что? как я понимаю это нечто куда вы передаёте указатель на область памяти которую хотите выделить, использовать память по указателю не выделяя ее конечно можно, но никто вам не гарантирует что кто-то ещё тоже не начнёт использовать
А вы книгу покупали или скачали где кстати?
Обсуждают сегодня