Я читал here, как и в других местах, что удаление одной и той же переменной дважды может быть катастрофическим (даже если имеется более одного имени переменной).Как избежать двойного удаления переменных в C++?
Пусть у меня есть функция, которая принимает входной и выходной массив:
void test(int*& input, int*& output) {
if(input[0] == 0) {
output = input;
}
}
и может назначить указатель на другую переменную Я использую:
int *input = new int[3];
int *output = new int[3];
input[0] = 0;
test(input, output);
delete[] input;
delete[] output;
как я могу избежать двойное удаление?
В этом слишком упрощенном сценарии я знаю, что могу проверить адреса указателей, чтобы убедиться, что они равны и условно удалить только один из них, но есть ли лучшее решение, когда я не буду знать, что указатели могут указывать на такая же память?
Edit:
прибрано вещи, чтобы избежать некоторой путанице ..
* «Как я могу избежать двойного удаления?» * Это не злобно, поэтому не читайте его как таковое - [не используйте 'new'] (http://stackoverflow.com/questions/ 6500313 /). –
И не используйте 'delete' либо –
Ваш код не имеет двойного удаления в любом случае,' input' и 'output' указывают на разные буферы. Локальные переменные с одинаковыми именами внутри 'test' не влияют на переменные вне функции. –