Your constructor allocates memory and stores a pointer to it in s
Your 'assign()' member function replaces that pointer without deallocating the memory. This is where the memory leak takes place: the old value of the pointer is lost forever.
The destructor attempts to use delete on a pointer that was never allocated with new (this is where the behavior of the program becomes undefined)
Also, you're including <string> and never using it. Based on the functions you're calling, you meant to include <cstring>
Also, you're creating non-const pointers to string literals, which is an error in C++11