I'll look past that you're calling delete on a stack-allocated object, and examine the usage of delete this in general.
There is a school of thought that says "It's not a good idea". However, I have seen it used a number of times with implementations of reference counted objects. 
In COM, the framework requires that all objects would be created by a factory method, and then released again by a call to "Release".
  class MyRefCountedObject : public IUnknown
  {
      private:
           // Making the constructor and destructor private
           // so that the object can only be allocated as a pointer
           MyRefCountedObject() {}
           ~MyRefCountedObject() {}
           MyRefCountedObject(const MyRefCountedObject& mrco) {}
            int _refCount;
      public:
           static MyRefCountedObject* CreateInstance()
           {
                MyRefCountedObject* pObject = new MyRefCountedObject();
                pObject->_refCount = 1;
                return pObject;
           }
           void Release()
           {
                if(--_refCount == 0)
                {
                    delete this;
                }
           };
           void AddRef()
           {
               ++_refCount;
           }
  }
Note - that is not a complete implementation, just giving an idea of the logic.
But, by making the constructor private, I can ensure that this would only ever be allocated on the heap.