我使用以下类:
#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
创建对象的方式(从而在某处管理毁灭的痛苦)?
答案 0 :(得分:1)
您遇到了未定义的行为,因为您忘记了
return listA;
你最好使用std::array
。如果您选择保留此方法,您还需要一个赋值运算符。
我假设您的实际成员是int* cells;
。