class BlockPtr { protected: char *m_BlockData; char *MakeBlockResident(); public: BlockPtr(); BlockPtr *operator->(); char Get(int p_Index); }; BlockPtr::BlockPtr() { m_BlockData = 0; } BlockPtr *BlockPtr::operator->() { m_BlockData = MakeBlockResident(); return this; } char *BlockPtr::MakeBlockResident() { return new char[1000]; } char BlockPtr::Get(int p_Index) { return m_BlockData[p_Index]; } main() { BlockPtr X; BlockPtr *Y; X->Get(1); Y->Get(1); X.Get(1); }