Why won’t my custom widget stay in the sidebar after a reload?

You forgot the constructor

Example:

function __construct() {
    parent::__construct(
        'foo_widget', // Base ID
        __( 'Widget Title', 'text_domain' ), // Name
        array( 'description' => __( 'A Foo Widget', 'text_domain' ), ) // Args
    );
}

http://codex.wordpress.org/Widgets_API