一个有指针和vector的类,该如何定义拷贝构造函数?

神的理想 2012-08-26 10:11:26
这个类中有很多类指针还有vector,该如何定义他的拷贝构造函数?还有析构函数的定义有什么要注意的吗?

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);
};
...全文
179 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
healer_kx 2012-08-26
  • 打赏
  • 举报
回复
比如说,一个侦听80端口的server socket。
你又把它复制出来一份,这两个socket都是什么呢?

为什么需要两个?

如果有一个析构了,另外一个又怎么办呢?
神的理想 2012-08-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
因为我注意到你的类是个 Session

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

有很多种对象,是不应该有拷贝构造函数的,比如Socket类。
[/Quote]
那么他的构造函数用默认的,还是要自定义?Socket类为什么不能拷贝构造了?
希望能有示例代码,多谢!
healer_kx 2012-08-26
  • 打赏
  • 举报
回复
因为我注意到你的类是个 Session

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

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


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

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

最后这个地方可以用 vector<string>
树下 2012-08-26
  • 打赏
  • 举报
回复
那是要注意深度复制了,和资源的释放了。

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧