将delete也会导致被压入vector的数组丢失内存
Will delete cause the array pushed into a vector to lose memory as well?
我有以下函数,它只是一个构造函数。它所做的是为一个二维浮点指针数组分配内存。我很想知道是否,当我将这个数组添加到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;
}
代码坏了。你不能用new[]
分配,用delete
释放。该实现允许在不同的分配器中使用完全不同的逻辑。
你想要的是delete[] matrix;
。
至于你问的问题,这取决于你在vector中存储了什么。如果在vector中存储了一个指针,然后在该指针上调用delete[]
,则vector中保存了一个无效指针。哎哟。如果vector包含对象本身,则构造一个具有与删除对象相同值的新对象,因此vector仍然可以。
你的代码是不可编译的,也不清楚vector的完整类型是什么,所以很难说。此外,由于这个原因,您应该使用智能(或引用计数)指针。
删除matrix
后,压入vector的指针副本无效。任何使用这些指针的尝试都将导致未定义的行为,可能导致程序崩溃。
相关文章:
- 在c++中用vector填充一个简单的动态数组
- std::vector的包装器,使数组的结构看起来像结构的数组
- 将 int 数组转换为 std::vector<int*>
- 为什么std::vector比数组慢
- C++ 无法将 std::vector<BYTE> 转换为字符串或字符数组
- 如何将数组的内容附加到 std::vector?
- 在 C++ 中使用 Vector 在动态数组中插入值,循环
- 为什么优化大型 std::vector 数组会导致 SegFault?
- SFML访问std::vector内的数组
- 如何在C++中将 std::vector 移动到原始数组中
- 如何使 std::vector<T> 使用现有的 T* 数组而不复制这些值?
- 将 unique_ptr<std::vector> 与 c 样式数组结合使用
- 将 2D 数组插入 std::vector 时"cannot convert from 'const GLfloat [12]' to '_Objty'"错误消息
- 查找索引数据结构,例如`sTD :: vector`(非数组)
- 如何在多个文件中声明全局 std::vector 2d 数组?C++
- 删除[]是否可以与通用数组正常使用?如果是这样,为什么使用std :: vector ::擦除它会导致释放内存的错误
- 使用 ::std::vector 创建数组
- 分配std::vector数组会减慢后续计算的速度
- std::vector数组的大小
- 在c++中使用Vector数组中的Vector