Is the book wrong?
<pre><code>template &lt;typename T&gt;
  class Table {
    public:
      Table();
      Table(int m, int n);
      Table(int m, int n, const T&amp; value);
      Table(const Table&lt;T&gt;&amp; rhs);
      ~Table();
      Table&lt;T&gt;&amp; operator=(const Table&amp; rhs);
      T&amp; operator()(int i, int j);
      int numRows()const;
      int numCols()const;
      void resize(int m, int n);
      void resize(int m, int n, const T&amp; value);
    private:
      // Make private because this method should only be used
      // internally by the class.
      void destroy();
    private:
      int mNumRows;
      int mNumCols;
      T** mDataMatrix;
  };

template &lt;typename T&gt;
  void Table&lt;T&gt;::destroy() {
    // Does the matrix exist?
    if (mDataMatrix) {
      for (int i = 0; i &lt; _m; ++i) {
        // Does the ith row exist?
        if (mDataMatrix[i]) {
          // Yes, delete it.
          delete[]mDataMatrix[i];
          mDataMatrix[i] = 0;
        }
      }

      // Delete the row-array.
      delete[] mDataMatrix;
      mDataMatrix = 0;
    }

    mNumRows = 0;
    mNumCols = 0;
  }
</code></pre>

<p>This is a code sample I got from a book. It demonstrates how to destroy or free a 2x2 matrix where mDataMatrix is the pointer to array of pointers.</p>

<p>What I don't understand is this part:</p>

<pre><code>for(int i = 0; i &lt; _m; ++i) {
  // Does the ith row exist?
  if (mDataMatrix[i]) {
    //.….

  }
}
</code></pre>

<p>I don't know why the book uses _m for max number of row-ptr. It wasn't even a variable define in class; the variable for max row is mNumRows. Maybe it is some compiler pre-defined variable? Another thing I am quite confuse is why is it ++i? pre-operator, why not i++? Will it make different if I change it into i++?</p>
