继承和指向派生类实例的智能指针

时间:2018-08-10 17:11:06

标签: class sockets inheritance smart-pointers

当前,我正在编写简单的聊天程序,并且在构建类时遇到问题。

这是我开设的两个班

Socket.h

class Socket;
using SocketPtr = shared_ptr<Socket>;

class Socket
{
private:
    SOCKET socket;
public:
    virtual int bind(const SocketAddress& toAddress) = 0;

    void setSocket(SOCKET sock);
    SOCKET getSocket();
};

TCPSocket.h

class TCPSocket;
using TCPSocketPtr = shared_ptr<TCPSocket>;

class TCPSocket : public Socket
{
private:
    friend class SocketUtil;
    TCPSocket(SOCKET sock);

public:
    ~TCPSocket();
    int bind(const SocketAddress& toAddress) override;
    int listen(int backLog = SOMAXCONN);
    int connect(const SocketAddress& toAddress);
    TCPSocketPtr accept(SocketAddress& fromAddress);
    int32_t send(const void* data, size_t length);
    int32_t receive(void* data, size_t length);
};

我正在尝试使用带有共享指针的tcp套接字实例,但是当我尝试从TCPSocket访问vector<SocketPtr>的成员函数时,我无法访问它们,因为实例类型来自向量是shared_ptr<Socket>

现在,我只是在用shared_ptr<TCPSocket>将它们转换为static_pointer_cast<TCPSocket>(exampleSocket)之后使用它们,但是我认为我不应该建立这样的类。

为建立更好的套接字编程类提供的帮助将不胜感激。

对不起,我的英语不好。

1 个答案:

答案 0 :(得分:0)

当我这样做时,我通常会得到两个类,一个接受者和一个连接。接受器等待连接请求,然后将其传递给创建新连接线程并开始监听的套接字使用方。也许像this之类的东西。