我有一个类'TcpCom',其中我想将boost.asio tcp套接字作为类成员,以便所有类函数不必采取在一个TCP套接字中作为一个参数(打破了'COM'基类的通用设计,我试图做)。然而,我对如何在类的成员初始化列表中正确初始化套接字感到困惑。正确初始化具有参数的类成员对象的方法
,通常要使用创建:
boost::asio::io_service io_service;
boost::asio::ip::tcp::socket tcpSocket(io_service);
以前,当我跑进我制造的物体类的成员,我在成员初始化列表使用new
初始化对象的unique_ptr
类似的问题,但后来读这是不好的做法。有没有一种好的方法来使这个设计工作,或者如果TcpCom只需要一个TCP套接字作为参数?
#ifndef TCPCOM_H
#define TCPCOM_H
#include "COM.h"
#include <boost/asio.hpp>
class TcpCom : public COM {
public:
TcpCom() : remoteHost(""), remotePort(""), connectedToRemoteHost(false)
{ }
void sendMessage();
void connectToRemoteHost(std::string host, std::string port);
private:
//Needs to be initialized
boost::asio::io_service io_srv;
//Needs to be initialized
boost::asio::ip::tcp::socket tcpSocket;
std::string remoteHost;
std::string remotePort;
bool connectedToRemoteHost;
};
#endif
-
#ifndef COM_H
#define COM_H
#include <string>
class COM {
public:
COM();
virtual void sendMessage() = 0;
virtual void connectToRemoteHost(std::string host, std::string port) = 0;
bool connectedToRemoteHost;
virtual ~COM();
protected:
private:
};
#endif // COM_H