忘记深拷贝的后果

写了一个类,

class CTP

{
public:
 CTP( )
 {
   m_pic = new BYTE [ 20 ] ;
 }

 ~CTP( )
 {
  delete [] m_pic ;
 }

 

private:

BYTE * m_pic;

}

在另一端写了类似这样的代码

{

vector<CTP> vTp;

CTP a;

vTp.push_back(a);

}

然后每次在运行到析构的delete的时候会内存访问错误。找了很久,在便友的帮助下,找到原因——push_back会做一次CTP的复制构造函数,由于我没有给出代码,所以编译器自己写了一个浅拷贝。造成那段代码被重复删除,问题出现。

 

解决办法,是给出复制构造函数,或者(更好的办法)是封装vector,只是传递指针。

posted @ 2010-01-30 13:48  aicro  阅读(198)  评论(0编辑  收藏  举报