У меня есть конструктор, который выделяет несколько блоков памяти с помощью оператора new
.Исключение выделения памяти в конструкторе
X::X() {
a = new int[100];
b = new char[100];
c = new float[100];
}
Мой вопрос, если распределение c
терпит неудачу, и конструктор генерирует исключение, будет память для a
и b
автоматически освобождается?
№ Это метод, известный как [RAII] (https://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization) полезен для. Если вам нужен класс для управления динамическим массивом, он называется ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector). Не пытайтесь написать его самостоятельно. – BoBTFish
Обязательное чтение: [Почему программисты на С ++ минимизируют использование «новых»?] (Http://stackoverflow.com/questions/6500313/why-should-c-programmers-minimize-use-of-new) –
Помимо использования из 'std :: vector', если размер является фиксированной константой времени компиляции, а память не должна выделяться из кучи, рассмотрите использование [' std :: array'] (http: // en .cppreference.com/w/cpp/container/array). –