我正在开发一个类来读取 WAV 文件。该类应该为每个 channel (左/右)生成一个 vector , channel vector 在它们自己的 vector 中。
我在类中定义了加载方法:
std::vector<std::vector<double> >* wavloader::load() throw(load_failed)
因此返回指向这个 vector vector 的指针。
在类中,我为顶级 vector 分配了内存,然后为任意数量的 channel 创建了 vector ,如下所示:
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);
然后我遍历该文件,并用适当的样本填充每个 vector 。
虽然使用 new
分配了顶级“vector 的 vector ”,但我担心各个“ channel ” vector (使用 dummy_vector 生成)以某种方式在堆栈上分配。
当我离开类时,包含的 vector 是否会超出范围并可能被覆盖?
程序在没有任何警告的情况下编译,valgrind 对此非常满意,我仍然从返回的指针中获得正确的值,类 delete
d,但我有点担心可能是阴险的事情!
最佳答案
我知道这很可怕,但你做的方式很好。一个好的经验法则是查看声明中 *
的数量,然后删除
那么多项目。所以你有一个指向动态分配 vector 的指针。很好,你需要删除它。
里面呢?好吧,该 vector 保存了指向其他 vector 的指针,然后我们将负责摆脱它们,但由于您那里只有 vector ,它们将超出范围并被删除。
关于c++ - 我的 vector vector 是内存安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8204650/