今天在网上看到“对需要保存到容器中的对象的类型来说,每个类都必须至少实现拷贝构造函数,最好还能重载赋值操作符。”这样一句话。不甚明白,于是写了个实验程序。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class base
{
public:
base(char *n)
{
if(n != NULL)
{
m_nLen = strlen(n) + 1;
m_data = new char[m_nLen];
memset(m_data, 0, m_nLen);
strcpy(m_data, n);
}
else
{
m_nLen = 0;
m_data = NULL;
}
}
~base()
{
if(m_data)
{
delete []m_data;
m_data = NULL;
}
}
void show()
{
cout<<m_data<<endl;
}
private:
char *m_data;
int m_nLen;
};
int _tmain(int argc, _TCHAR* argv[])
{
char *p = "hello world!";
base b(p);
vector<base> vec;
vec.push_back(b);
vec[0].show();
getchar();
return 0;
}
在VS2008下编译通过,前面还好,能出正确结果,但是按下回车后,程序就崩溃了。最后发现是在析构函数的delete []m_data;处发生了错误。经过仔细跟踪&#