I've read your question several times and Solution #1 trying to understand the problem better, and I'm still not sure I have my head around it. You say that the copy constructor and assignment=() are disabled but they are not. In the code you provide above, they are implemented as empty methods but are callable and will not work correctly if called.
Note the important difference between the lines:
XMLLegadoResponse &operator=(const XMLLegadoResponse &origial) {;}
XMLLegadoResponse &operator=(const XMLLegadoResponse &origial);
You want the APIs disabled, so you want the latter.
You also have not disabled the default constructor. You probably want to do that.
I think you want to do the following in the original code:
class XMLResponseBase : public HandlerBase
{
public:
explicit XMLResponseBase(const char *lpszXML, size_t sizeXML, const char *funcao);
private:
XMLResponseBase(); XMLResponseBase(const XMLResponseBase &); XMLResponseBase &operator=(const XMLResponseBase &); };
And your derived class should be similar to:
class XMLLegadoResponse : public XMLResponseBase
{
public:
explicit XMLLegadoResponse(const char *lpszXML, size_t sizeXML, const char *funcao);
private:
XMLLegadoResponse(); XMLLegadoResponse(const XMLLegadoResponse &); XMLLegadoResponse &operator=(const XMLLegadoResponse &); };