Declaration vs. Definition vs. Initialization vs. Instantiation vs. Mutation

class Counter; // Declaration (class)

class Counter // Definition (class)
{
  public:
    Counter(); // Declaration (constructor)
    unsigned addOne(); // Declaration (method)
  private:
     unsigned m_value; // Declaration (variable)
};

Counter::Counter() // Definition (constructor)
  : m_value(0) // Initialization (variable)
{}

unsigned Counter::addOne() // Definition (method)
{
  return ++m_value; // Mutation (variable)
}

int main ()
{
  // Creation (object) = Declaration and Initialization
  // Instantiation (class)
  Counter* counter = new Counter();

  // Destruction (object)
  delete counter;

  return 0;
}