读书人

一个有指针和vector的类该怎么定义拷

发布时间: 2012-09-06 10:37:01 作者: rapoo

一个有指针和vector的类,该如何定义拷贝构造函数?
这个类中有很多类指针还有vector,该如何定义他的拷贝构造函数?还有析构函数的定义有什么要注意的吗?

C/C++ code
class Session{public:    Session(unsigned int nIndex, IoHandle* ioHandle);    void Init();    inline unsigned int     GetIndex() { return m_nIndex; }    inline SendBuffer*    GetSendBuffer() { return m_pSendBuffer; }    inline RecvBuffer*    GetRecvBuffer() { return m_pRecvBuffer; }    inline NetObject*       GetNetObject() { return m_NetObject; }    void RealSendData(const std::vector<char>& buf);    void BindNetObject(NetObject* pNetObject);    //返回ConnectAddrInfo的类地址    ConnectAddrInfo& GetConnectAddrInfo();private:    unsigned int m_nIndex;    NetObject* m_NetObject;    IoHandle* m_IoHandle;    ConnectAddrInfo m_ConnectAddrInfo;    SendBuffer* m_pSendBuffer;    RecvBuffer* m_pRecvBuffer;    bool        m_bRemove;    bool        m_WaitPreRecv;    bool        m_DisconnectOrdered;    unsigned int m_LastRecvBufLen;    unsigned int m_LastSyncTime;    std::list< std::vector<char> >    m_WaitSendList;private:    /// Handle completion of a read operation.    void handle_read(const boost::system::error_code& e,        std::size_t bytes_transferred);    /// Handle completion of a write operation.    void handle_write(const boost::system::error_code& e,        std::size_t bytes_transferred);};


[解决办法]
那是要注意深度复制了,和资源的释放了。
[解决办法]
因为我注意到你的类是个 Session

你首先要想好,这样的一个东东,是不是应该可以被复制。。。

有很多种对象,是不应该有拷贝构造函数的,比如Socket类。


还有这个:
std::list< std::vector<char> > m_WaitSendList;
可以写为
std::list< string > m_
吧?

另外,我个人倾向于不用list,而是vector。

最后这个地方可以用 vector<string>

[解决办法]
比如说,一个侦听80端口的server socket。
你又把它复制出来一份,这两个socket都是什么呢?

为什么需要两个?

如果有一个析构了,另外一个又怎么办呢?

读书人网 >C++

热点推荐