Я разрабатываю класс для чтения WAV-файла.Класс должен создавать вектор для каждого канала (влево / вправо), причем векторы каналов находятся в собственном векторе.
Я определил метод загрузки в классе как:
std::vector<std::vector<double> >* wavloader::load() throw(load_failed)
следовательно, возвращая указатель на этот вектор векторов.
Внутри класса я выделил память для вектора верхнего уровня, затем создал векторы для столько каналов, сколько я хочу, следующим образом:
std::vector<std::vector<double> >* audio_all_chans = new std::vector<std::vector<double> >;
std::vector<double> dummy_vector;
for(int chan_index = 0; chan_index<n_channels; chan_index++)
(*audio_all_chans).push_back(dummy_vector);
Затем я запускаю файл и заполняю каждый из векторов соответствующими выборками.
Хотя верхний уровень «вектор векторов» назначается с помощью new
, яобеспокоен тем, что отдельные векторы «канала» (сгенерированные с помощью dummy_vector) расположены в стеке.
Когда я уйду из класса, будут ли содержащиеся векторы выходить за рамки и будут перезаписаны?
Программа компилируется без предупреждения, valgrind полностью ей доволен, и я все еще получаю правильные значения из возвращенного указателя с классом delete
d, но я немного обеспокоен, что это может произойтипроисходит что-то коварное!