zeb*_*und 1 c++ memory-management
我有以下函数,它只是一个构造函数.它的作用是为二维浮动指针数组分配内存.我很想知道是否,当我将这个数组添加到一个vector实例时,如果我删除了数组的原始初始化,它是否也会删除该向量中的数组?
这是代码:
Evaluator::Evaluator(int row, Column col) {
this->verticies = new std::vector();
float* matrix = NULL;
switch(col) {
case ONE:
matrix = new float[row][1];
break;
case TWO:
matrix = new float[row][2];
break;
case THREE:
matrix = new float[row][3];
break;
case FOUR:
matrix = new float[row][4];
break;
}
this->verticies->push_back(matrix);
delete matrix;
}
Run Code Online (Sandbox Code Playgroud)
代码刚好坏了.您无法分配new[]和取消分配delete.允许实现在不同的分配器中使用完全不同的逻辑.
你想要的是什么delete[] matrix;.
至于你问的问题,这取决于你在矢量中存储的内容.如果将指针存储在向量中然后delete[]在同一指针上调用,则向量将保持无效指针.哎哟.如果向量本身保存了对象,那么您构造了一个与您删除的对象具有相同值的新对象,因此向量仍然可以.
你的代码不可编译,也不清楚向量的完整类型是什么,所以很难说.此外,出于这个原因,您应该使用智能(或引用计数)指针.