push_back要在结构

时间:2015-07-03 09:25:00

标签: c++

我有一个结构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有一个。还有其他原因吗?非常感谢!

0 个答案:

没有答案