一个有指针和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都是什么呢?
为什么需要两个?
如果有一个析构了,另外一个又怎么办呢?