Skip to content

Commit 3fa9d85

Browse files
author
Evgeny Prikhodko
committed
Exception safe factory
1 parent 6522610 commit 3fa9d85

File tree

2 files changed

+17
-20
lines changed

2 files changed

+17
-20
lines changed

libmodbus_cpp/factory.cpp

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,34 +4,30 @@
44
#include <libmodbus_cpp/master_rtu.h>
55
#include <libmodbus_cpp/slave_rtu.h>
66

7-
libmodbus_cpp::MasterTcp *libmodbus_cpp::Factory::createTcpMaster(const char *address, int port)
7+
std::unique_ptr<libmodbus_cpp::MasterTcp> libmodbus_cpp::Factory::createTcpMaster(const char *address, int port)
88
{
9-
MasterTcpBackend *b = new MasterTcpBackend();
9+
std::unique_ptr<MasterTcpBackend> b(new MasterTcpBackend());
1010
b->init(address, port);
11-
MasterTcp *m = new MasterTcp(b);
12-
return m;
11+
return std::unique_ptr<MasterTcp>(new MasterTcp(b.release()));
1312
}
1413

15-
libmodbus_cpp::SlaveTcp *libmodbus_cpp::Factory::createTcpSlave(const char *address, int port)
14+
std::unique_ptr<libmodbus_cpp::SlaveTcp> libmodbus_cpp::Factory::createTcpSlave(const char *address, int port)
1615
{
17-
SlaveTcpBackend *b = new SlaveTcpBackend();
16+
std::unique_ptr<SlaveTcpBackend> b(new SlaveTcpBackend());
1817
b->init(address, port);
19-
SlaveTcp *s = new SlaveTcp(b);
20-
return s;
18+
return std::unique_ptr<SlaveTcp>(new SlaveTcp(b.release()));
2119
}
2220

23-
libmodbus_cpp::MasterRtu *libmodbus_cpp::Factory::createRtuMaster(const char *device, int baud, libmodbus_cpp::Parity parity, DataBits dataBits, StopBits stopBits)
21+
std::unique_ptr<libmodbus_cpp::MasterRtu> libmodbus_cpp::Factory::createRtuMaster(const char *device, int baud, libmodbus_cpp::Parity parity, DataBits dataBits, StopBits stopBits)
2422
{
25-
MasterRtuBackend *b = new MasterRtuBackend();
23+
std::unique_ptr<MasterRtuBackend> b(new MasterRtuBackend());
2624
b->init(device, baud, parity, dataBits, stopBits);
27-
MasterRtu *m = new MasterRtu(b);
28-
return m;
25+
return std::unique_ptr<MasterRtu>(new MasterRtu(b.release()));
2926
}
3027

31-
libmodbus_cpp::SlaveRtu *libmodbus_cpp::Factory::createRtuSlave(const char *device, int baud, libmodbus_cpp::Parity parity, DataBits dataBits, StopBits stopBits)
28+
std::unique_ptr<libmodbus_cpp::SlaveRtu> libmodbus_cpp::Factory::createRtuSlave(const char *device, int baud, libmodbus_cpp::Parity parity, DataBits dataBits, StopBits stopBits)
3229
{
33-
SlaveRtuBackend *b = new SlaveRtuBackend();
30+
std::unique_ptr<SlaveRtuBackend> b(new SlaveRtuBackend());
3431
b->init(device, baud, parity, dataBits, stopBits);
35-
SlaveRtu *s = new SlaveRtu(b);
36-
return s;
32+
return std::unique_ptr<SlaveRtu>(new SlaveRtu(b.release()));
3733
}

libmodbus_cpp/factory.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#define LIBMODBUS_CPP_FACTORY_H
33

44
#include "defs.h"
5+
#include <memory>
56

67
namespace libmodbus_cpp {
78

@@ -13,10 +14,10 @@ class MasterRtu;
1314
class Factory
1415
{
1516
public:
16-
static MasterTcp *createTcpMaster(const char *address, int port);
17-
static SlaveTcp *createTcpSlave(const char *address, int port);
18-
static MasterRtu *createRtuMaster(const char *device, int baud, Parity parity = Parity::None, DataBits dataBits = DataBits::b8, StopBits stopBits = StopBits::b1);
19-
static SlaveRtu *createRtuSlave(const char *device, int baud, Parity parity = Parity::None, DataBits dataBits = DataBits::b8, StopBits stopBits = StopBits::b1);
17+
static std::unique_ptr<MasterTcp> createTcpMaster(const char *address, int port);
18+
static std::unique_ptr<SlaveTcp> createTcpSlave(const char *address, int port);
19+
static std::unique_ptr<MasterRtu> createRtuMaster(const char *device, int baud, Parity parity = Parity::None, DataBits dataBits = DataBits::b8, StopBits stopBits = StopBits::b1);
20+
static std::unique_ptr<SlaveRtu> createRtuSlave(const char *device, int baud, Parity parity = Parity::None, DataBits dataBits = DataBits::b8, StopBits stopBits = StopBits::b1);
2021
};
2122

2223
}

0 commit comments

Comments
 (0)