Т.е. если ты научишься водить экскаватор вместо того, чтобы использовать лопату, то будешь деградировать? Ущербная логика.
Да, в учебных целях это полезно, но практического смысла писать свое нет.
Разве я хоть пол-слова сказал о деградации?! А насчет экскаватора... Ну вот попросила жена под окнами выкопать ямку, посадить цветы. А ты в недоумении чешешь репу, не представляя, как 
сюда, под окно, втиснуть этот проклятый экскаватор! :-)
Поэтому насчет практики - в корне не согласен. Опять же, а моя родная область embedded, где половины этих примочек вообще нет, а остальные работают незнамо как? А ограниченность в ресурсах, а быстродействие? Поэтому я и говорю, что обычный клепатель из кубиков быстро сбацает приложение, которое заработает на мощном, современном компе. И на всякие тонкости ему плевать. А я разрабатываю приборы :-) Тут мощный, геймеровский комп с восьмой Виндой не применишь.
К вопросу. Оказалось, что все очень просто. Набросал такой примерчик:
class SArray
{
public:
  SArray(int size) : _dummy(0) { _array = new int[size]; _array_size = size; }
  ~SArray() { if(_array) delete [] _array; }
  int operator[](int i) const
  {
    if(_array == 0)                     return 0;
    if( (i < 0) || (i >= _array_size) ) return 0;
    return _array[i];
  }
  int& operator[](int i)
  {
    if(_array == 0)                     return _dummy;
    if( (i < 0) || (i >= _array_size) ) return _dummy;
    return _array[i];
  }
private:
  int  _dummy;
  int* _array;
  int  _array_size;
};
Работает в точности, как простой массив:
  SArray a(3);
  a[0] = 1;
  a[1] = a[0] + 1;
  a[2] = a[1] + 2;
Значения элементов массива: 1, 2 и 4.
Единственное отличие то, что в объявлении нужно применять круглые скобки, а не квадратные.
P.S. Теперь попытаюсь сделать оператор копирования (или как его назвать), чтобы копировать данные примерно так:
int dest[3];
CopyMemory(dest, a, sizeof(a));