我有一个结构A.在这个结构中,有一个list <struct A>
和一些指针。
struct A{
char *p;
int a;
list<A> list;
A(char *s, int b)
{
cout << "constructor:" << b << endl;
p = s;
a = b;
}
A(const struct A &right)
{
cout << "copy constructor" << right.a << endl;
int len = strlen(right.p)+1;
p = new char[len];
memset(p, 0, len);
memcpy(p, right.p, len);
a = right.a;
}
void insert(A &other)
{
list.push_back(other);
}
~A()
{
cout << "~sss(): " << a << endl;
delete[] p;
p = NULL;
}
};
当在函数fun中插入一个实例列表时,调用析构函数后会发生heapfree错误,该函数有趣如下:
void fun(A &other){
A f("ssss", 1);
other.insert(f);
}
我在google中搜索这个,并且所有人都说push_back()会插入一个对象的副本,所以需要调用copy构造函数。当没有复制构造函数时,它会调用默认的复制构造函数来做浅拷贝,但是struct有一个。还有其他原因吗?非常感谢!