为啥这段代码在VS2019中运行最后报错:堆损坏?这不是深度拷贝吗?最后没有调用析构函数吗?
#include <stdio.h>
#include <string>
class A
{
public:
A() // 构造函数,p指向堆中分配的一空间
{
m_pdata = new char(100);
printf("默认构造函数\n");
}
//自定义拷贝构造函数
A(const A& r)
{
m_pdata = new char(100); // 为新对象重新动态分配空间
memcpy(m_pdata, r.m_pdata, strlen(r.m_pdata));
printf("copy构造函数\n");
}
~A() // 析构函数,释放动态分配的空间
{
if (m_pdata != NULL)
{
delete m_pdata;
printf("析构函数\n");
}
}
private:
char *m_pdata; // 指针成员
};
int main()
{
A a;
A b(a); // 复制对象
return 0;
}
//可以声明多个拷贝构造函数
class A
{
public:
A(const A&);//const拷贝构造
A(A &);//非const拷贝构造
A(A&, int iData);
}