Существует класс с именем "X", подобный следующему:
class X {
private:
int *ptr;
public:
X() {
ptr = new int[2];
ptr[0] = 0;
ptr[1] = 0;
}
X(int a, int b) {
ptr = new int[2];
ptr[0] = a;
ptr[1] = b;
}
X(const X &val) {
delete[] ptr;
ptr = new int[2];
ptr[0] = val.ptr[0];
ptr[1] = val.ptr[1];
}
X get() {
X ret(ptr[0], ptr[1]);
return ret;
}
};
Предположим, что существует переменная X, определенная с помощью X v(2, 3)
.
Если мы вызываем v.get()
,это нормально.
Но, если мы позвоним v.get().get()
, это не хорошо.Он выдает ошибку времени выполнения в секции delete[] ptr
в конструкторе копирования, содержание которого заключается в том, что я пытаюсь удалить неопределенный (0xcccccccc) указатель.
Один из возможных вариантов решения этой проблемы - использование C ++ - STL.как <array>
или <vector>
.Но я хочу реализовать с помощью указателя.
Как справиться с этой ошибкой во время выполнения, с реализацией на основе указателя?