Implement a new custom deleter implementation for QSharedPointer
Implement a new custom deleter implementation for QSharedPointer

Instead of using a template class derived from
QtSharedPointer::ExternalRefCountData, use a non-template class that
has a function pointer. This avoids generating a virtual table for
each QSharedPointer type and custom deleter.

The trick here is that we don't "new" the d pointer anymore, but we
simply allocate memory (via ::operator new, so it may throw an
exception), then we use the placement new to initialise the
non-template d-pointer and the template deleter sub-objects. Then we
store the pointer to a regular function which will execute the user's
custom deleter.

I also added operator delete() to the class to make sure no smarty
compiler decides to delete the d-pointer with a fixed size (I don't
think that happens, but just to be on the safe side).

igor-sfdc/qt-wk,radekp/qt,pruiz/wkhtmltopdf-qt,radekp/qt,radekp/qt,pruiz/wkhtmltopdf-qt,igor-sfdc/qt-wk,igor-sfdc/qt-wk,pruiz/wkhtmltopdf-qt,igor-sfdc/qt-wk,pruiz/wkhtmltopdf-qt,pruiz/wkhtmltopdf-qt,pruiz/wkhtmltopdf-qt,pruiz/wkhtmltopdf-qt,radekp/qt,radekp/qt,igor-sfdc/qt-wk,igor-sfdc/qt-wk,pruiz/wkhtmltopdf-qt,pruiz/wkhtmltopdf-qt,radekp/qt,radekp/qt,pruiz/wkhtmltopdf-qt,radekp/qt,igor-sfdc/qt-wk,igor-sfdc/qt-wk,igor-sfdc/qt-wk,igor-sfdc/qt-wk,radekp/qt,pruiz/wkhtmltopdf-qt,igor-sfdc/qt-wk,radekp/qt