在循环中复制构造函数调用

时间:2012-12-12 05:04:43

标签: c++

我使用以下类:

#include <list>

class A {
public:
    A();
    A(const A&);
    ~A();
    list<A> createCopies();

private:
    int *cells;
};

A::A() {
    this->cells = new int[5];
    for(unsigned int i = 0; i < 5; i++) {
        this->cells[i] = 0;
    }
}

A::(const A &oldA) {
    this->cells = new int[5];
    for(unsigned int i = 0; i < 5; i++) {
        this->cells[i] = oldA.cases[i];
    }
}

A::~A() {
    delete[] this->cells;
}

list<A> A::createCopies() {
    list<A> listA;

    for(unsigned int i = 0; i < 3; i++) {
        A newA = A(*this); // or A newA(*this)?
        A.cells[i] = 1;
        listA.push_back(newA);
    }

    return listA;
}

但是,编译器似乎总是在列表中推送相同的对象。我认为调用复制构造函数会阻止...

我错了吗?我是否需要使用new A创建对象的方式(从而在某处管理毁灭的痛苦)?

1 个答案:

答案 0 :(得分:1)

您遇到了未定义的行为,因为您忘记了

return listA;

你最好使用std::array。如果您选择保留此方法,您还需要一个赋值运算符。

我假设您的实际成员是int* cells;