Should “delete this” be called from within a member method?

Normally this is a bad idea, but it’s occasionally useful.

It’s perfectly safe as long as you don’t use any member variables after you delete, and as long as clients calling this method understand it may delete the object.

A good example of when this is useful is if your class employs reference counting:

void Ref() {
  m_References++;
}

void Deref() {
  m_References--;
  if (m_References == 0) {
    delete this;
  }
}

Leave a Comment