tru*_*ian 2 c++ vector dynamic-allocation
在动态分配struct之后,我认为在最后添加'delete'是谨慎的.但它给了我一个运行时错误.虽然编译好了.因此,如果我摆脱'删除',它运行正常.但我担心可能会有内存泄漏.处理此代码的安全方法是什么?
#include <iostream>
#include <vector>
using namespace std;
typedef struct
{
vector<char*> vstr;
vector<int> vint;
}VecStrInt;
int main()
{
VecStrInt * mtx = new VecStrInt();
mtx[0].vstr.push_back("Hello");
mtx[0].vint.push_back(1);
cout<<mtx[0].vint.at(0)<<endl;
cout<<mtx[0].vstr.at(0)<<endl;
//delete [] mtx;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
呼叫delete[]与呼叫不同delete(注意方括号).
你可以delete通过电话new和电话来delete[]调用电话new SomeType[someCount].
在您的情况下,您分配了一个对象,而不是一个数组.你的对象碰巧代表一个向量,它是一个数组,但它与C++没关系:你用"single"分配它new,所以你不能delete[]对它应用"数组" .
因此,您需要delete使用常规删除操作符:
delete mtx;
Run Code Online (Sandbox Code Playgroud)
注意:您应该std::vector<T>动态分配的情况很少.代表std::vector<T>自身的对象非常小; 数据存储在其他地方,并动态分配.所以你不妨使用
VecStrInt mtx;
Run Code Online (Sandbox Code Playgroud)
并delete完全跳过.
| 归档时间: |
|
| 查看次数: |
770 次 |
| 最近记录: |