C++ のコピー コンストラクター、演算子のオーバーロード、およびデストラクタに頭を悩ませようとしています。独自の型へのポインターを含むクラスが与えられた場合、コピー コンストラクターまたは = 演算子のオーバーロードをどのように記述しますか? 次のことを試みましたが、メインで Test オブジェクトを宣言または割り当てているときにセグメンテーション違反が発生し続けます。誰かが私が間違っていることを説明できますか?
class Test {
public:
Test(string name);
Test(const Test& testObject);
Test& operator=(const Test& rhs);
~Test();
string getName();
void setName(string newname);
Test* getNeighbor(int direction);
void setNeighbor(Test* newTest, int direction);
private:
string name;
Test* neighbors[4];
};
Test::Test() {
name = "*";
neighbors[4] = new Test[4];
}
Test::Test(const Test& testObject) {
this->name = testObject.name;
for (int i = 0; i < 4; i++) {
this->neighbors[i] = testObject.neighbors[i];
}
}
Test& Test::operator=(const Test& rhs) {
if (this == &rhs) {
return *this;
}
else {
name = rhs.name;
delete [] neighbors;
for (int i = 0; i < 4; i++) {
neighbors[i] = rhs.neighbors[i];
}
return *this;
}
}