class Pinger
 {
 public:
-    Pinger();
-    virtual ~Pinger();
-
     virtual void ping(
             const std::string &destination_ip,
             const int destination_port,
             boost::function<void(bool)> ping_done_callback
     ) = 0;
 
+protected:
+    Pinger();
+    virtual ~Pinger();
+
 };
 
 #endif /* PINGER_H */
 
 class IcmpMessage
 {
 public:
-    IcmpMessage();
-    virtual ~IcmpMessage();
-
     void init( const Icmpv4Type type );
     void init( const Icmpv6Type type );
 
     virtual std::istream& read( std::istream &is ) = 0;
     virtual std::ostream& write( std::ostream &os ) const = 0;
 
+protected:
+    IcmpMessage();
+    virtual ~IcmpMessage();
+
 };
 
 #endif // ICMP_MESSAGE_H
 
 class IcmpPacket
 {
 public:
-    IcmpPacket();
-    virtual ~IcmpPacket();
-
     virtual bool match_echo_reply(
             const uint16_t identifier,
             const uint16_t sequence_number,
     virtual bool read( std::istream &is ) = 0;
     virtual void write( std::ostream &os ) const = 0;
 
+protected:
+    IcmpPacket();
+    virtual ~IcmpPacket();
+
 };
 
 //-----------------------------------------------------------------------------