Prendere il seguente bit di codice che utilizza boost :: asio.Avviso strano C4512. Perché?
#include <boost/asio.hpp>
using boost::asio::ip::tcp;
class SocketTest
{
private:
boost::asio::io_service& mIOService;
tcp::acceptor mAcceptor; // Comment this line
public:
SocketTest(boost::asio::io_service& io_service)
: mIOService(io_service)
, mAcceptor(io_service, tcp::endpoint(tcp::v4(), 8080)) // Comment this line
{
}
};
Se si commento le due linee contrassegnate il compilatore (Visual Studio 2010) dà il seguente avviso quando si compila on/W4.
warning C4512: 'SocketTest' : assignment operator could not be generated
Che cosa rende queste due linee così speciali? Perché la loro esistenza consente la generazione dell'operatore incaricato?
Ah, sì. Sembri corretto. Ereditare da boost :: noncopyable risolto l'avviso. Spiega anche perché il mio tentativo di ricreare il problema con un tipo atomico (int & e int) non ricrea il problema. Grazie molto. – UberMongoose
Aggiornamento dal futuro: in C++ 11 c'è un modo migliore per gestire questo: http://stackoverflow.com/questions/9458741/with-explicitly-deleted-member-functions-in-c11-is-it-still -worthwhile-to-inh – Tim