Я работаю во встроенном проекте C++, где планирую сделать так, чтобы память была статически распределена как можно больше. Итак, я пишу набор функций для переопределения new/delete для всех классов и для глобального new/delete.Получение sizeof (MyClass) в объявлении члена класса
Вот наивная реализация:
class MyClass
{
int x;
float y;
double z;
static MyClass m_preAllocatedObjects[100]; //Solution 1
static char m_preAllocatedMemory[100 * sizeof(MyClass)]; //Solution 2
static char* getPreAllocatedMemory() // Solution 3
{
static char localStaticMemory[100 * sizeof(MyClass)];
return localStaticMemory;
}
static void* operator new(size_t s){
void* p; /*fill p from the pre-allocated memory or object*/;
return p;
}
};
Решение 1: Это работает для объекта только с конструктором по умолчанию.
Решение 2: Дает компиляционную ошибку use of undefined type 'MyClass'
; и это то, о чем я прошу около.
Решение 3: Это решение отлично работает.
Возникает вопрос:
Почему я могу создать статические члены MyClass, в то время как я не могу получить SizeOf (MyClass)?
Вы можете создать статический массив указателей на ваш объект и наделяют любой конструктор вы хотите. Статический вектор unique_ptr был бы лучшим, поскольку он будет автоматически удаляться. –