Я придумал это как быстрое решение проблемы отладки - у меня есть переменная указателя и ее тип, я знаю, что она указывает на массив объектов, размещенных в куче, но я не знаю, сколько. Поэтому я написал эту функцию для просмотра файла cookie, в котором хранится количество байтов при выделении памяти в куче.
template< typename T >
int num_allocated_items( T *p )
{
return *((int*)p-4)/sizeof(T);
}
//test
#include <iostream>
int main( int argc, char *argv[] )
{
using std::cout; using std::endl;
typedef long double testtype;
testtype *p = new testtype[ 45 ];
//prints 45
std::cout<<"num allocated = "<<num_allocated_items<testtype>(p)<<std::endl;
delete[] p;
return 0;
}
Я бы хотел знать, насколько переносим этот код.