Динамиски определить имеет сложный тип или простой
От: LowCoder  
Дата: 13.02.13 07:25
Оценка:
Пишу некое подобие буфера – менеджера памяти – пула памяти (не спрашивайте зачем и не предлагайте плз. буст, стл, и прочее такое- так надо) и вот хотел спросить. Можно ли как то динамически определить имеет ли конструктор или явлется ли объектом класса элемент передаваемый в ранее выделенную при помощи malloc для того что бы вызвать при помощи размещающего оператора new конструкторы передаваемых объектов ну и установить некий флаг что бы потом вручную вызвать деструкторы. Что то вроде (пример из википедии)


class A
{
public:
  A(int x){}
  ~A(){}
};
const int n = 50;
A* placementMemory = static_cast<A*>(operator new[] (n * sizeof(A)));
for (int i = 0; i < n; i++)
{
  new (placementMemory + i) A(rand()); //здесь память для объекта не выделяется, но инициализируется
}
//!!деинициализация памяти
for (int i = 0; i < n; i++)
{
  placementMemory[i].~A();
}
operator delete[] (placementMemory);




для простых типов такие конструкции то не нужны. Вот мне и нужно как то разделить код для объектов и для простых типов. Просто new не подойдет так как мне нужно выделть пул памяти, потом возможно изменять его размер итд. malloc, realloc подходит много лучше, сложности тока с объектами. Если динамичски определить нельзя придется передавть явно как параметр что вот мол объекты сейчас будем размешать а не хотелось бы городить лишних параметров.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.