Не понял проблему. Вроде очевидно:
class A
{
static char* ptr;
static int cnt;
A();
~A();
};
char* A::ptr = 0;
int A::cnt = 0;
A::A()
{
if(!cnt++)
ptr = new ...
}
A::~A()
{
if(!--cnt)
delete ptr;
}
Инициализация нулем не обязательна - для наглядности.