我有一個類'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