@@ -39,7 +39,7 @@ namespace Modbus {
3939 // ---------------------------------------------------------------------------
4040
4141 // ---------------------------------------------------------------------------
42- Device::Device (Device::Private & dd) : d_ptr (&dd ) {}
42+ Device::Device (std::unique_ptr< Device::Private> && dd) : d_ptr (std::move(dd) ) {}
4343
4444 // ---------------------------------------------------------------------------
4545 Device::Device () : d_ptr (new Private (this )) {}
@@ -198,7 +198,7 @@ namespace Modbus {
198198 if (net () == Rtu) {
199199 PIMP_D (Device);
200200
201- return * reinterpret_cast <RtuLayer *> (d->backend );
201+ return * reinterpret_cast <RtuLayer *> (d->backend . get () );
202202 }
203203 throw std::domain_error (" Unable to return RTU layer !" );
204204 }
@@ -209,7 +209,7 @@ namespace Modbus {
209209 if (net () == Ascii) {
210210 PIMP_D (Device);
211211
212- return * reinterpret_cast <AsciiLayer *> (d->backend );
212+ return * reinterpret_cast <AsciiLayer *> (d->backend . get () );
213213 }
214214 throw std::domain_error (" Unable to return ASCII layer !" );
215215 }
@@ -220,7 +220,7 @@ namespace Modbus {
220220 if (net () == Tcp) {
221221 PIMP_D (Device);
222222
223- return * reinterpret_cast <TcpLayer *> (d->backend );
223+ return * reinterpret_cast <TcpLayer *> (d->backend . get () );
224224 }
225225 throw std::domain_error (" Unable to return TCP layer !" );
226226 }
@@ -419,7 +419,7 @@ namespace Modbus {
419419 }
420420 while (d->recoveryLink && rc == -1 && !msg->isResponse ());
421421
422- if (rc > 0 && rc != msg->size ()) {
422+ if (rc > 0 && static_cast < size_t >(rc) != msg->aduSize ()) {
423423
424424 errno = EMBBADDATA;
425425 return -1 ;
@@ -451,15 +451,9 @@ namespace Modbus {
451451
452452 // ---------------------------------------------------------------------------
453453 Device::Private::Private (Device * q) :
454- q_ptr (q), isOpen (false ), backend (0 ), recoveryLink (false ),
454+ q_ptr (q), isOpen (false ), backend (nullptr ), recoveryLink (false ),
455455 debug (false ) {}
456456
457- // ---------------------------------------------------------------------------
458- Device::Private::~Private () {
459-
460- delete backend;
461- }
462-
463457 // ---------------------------------------------------------------------------
464458 void Device::Private::setConfigFromFile (const std::string & jsonfile,
465459 const std::string & key) {
@@ -513,15 +507,15 @@ namespace Modbus {
513507 switch (net) {
514508
515509 case Tcp:
516- backend = new TcpLayer (connection, settings);
510+ backend = std::unique_ptr<TcpLayer>{ new TcpLayer (connection, settings)} ;
517511 break ;
518512
519513 case Rtu:
520- backend = new RtuLayer (connection, settings);
514+ backend = std::unique_ptr<RtuLayer>{ new RtuLayer (connection, settings)} ;
521515 break ;
522516
523517 case Ascii:
524- backend = new AsciiLayer (connection, settings);
518+ backend = std::unique_ptr<AsciiLayer>{ new AsciiLayer (connection, settings)} ;
525519 break ;
526520
527521 default :
@@ -555,7 +549,7 @@ namespace Modbus {
555549 // ---------------------------------------------------------------------------
556550 int Device::Private::defaultSlave (int addr) const {
557551
558- if (addr < 0 && backend != 0 ) {
552+ if (addr < 0 && backend != nullptr ) {
559553 Net n = backend->net ();
560554 return (n == Rtu || n == Ascii) ? Broadcast : TcpSlave;
561555 }
0 commit comments