我有一点麻烦的理解是我得到的输出的矢量奇怪的行为,当我运行这个简单的代码与指针
#include <vector>
#include <iostream>
#include "LxUNIXsys.h"
using namespace std;
int main(int argc, char** argv) {
//memory management class
LxUNIXsys mem_manager;
vector <double*> vec;
mem_manager.DumpMemoryInfo();getchar();
for(int i =0; i < 3; i++) vec.push_back(new double (3));
for(int i =0; i < vec.size(); i++) cout << *vec[i] << endl;
mem_manager.DumpMemoryInfo();getchar();
for(int i =0; i < vec.size(); i++) delete vec[i];
vec.clear();
for(int i =0; i < 3; i++) cout << *vec[i] << endl;
cout <<"size of vec " <<vec.size() << endl;
mem_manager.DumpMemoryInfo();
return 0;
}
的LxUNIXsys是,我使用的一类内存转储,我从它调用的方法是:
void LxUNIXsys::DumpMemoryInfo() {
pid_t id = getpid();
// cout << "id = " << id << endl;
stringstream ss("");
ss << "pmap -d " << id << " | grep private ";
// cout << ss.str().c_str() << endl;
cout << "Memory dump: [pid = " << id << " ] " << flush; system(ss.str().c_str());
}
我得到的输出是:
Memory dump: [pid = 17012 ] mapped: 51476K writeable/private: 7452K shared: 0K
3
3
3
Memory dump: [pid = 17012 ] mapped: 51480K writeable/private: 7456K shared: 0K
3
3
3
size of vec 0
Memory dump: [pid = 17012 ] mapped: 51480K writeable/private: 7456K shared: 0K
所以,巴我删除了指针,不仅信息仍然存在,但我可以在clear()
后访问它。
我也尝试使用delete[]
删除vec,但结果是一样的。 PS:我知道智能指针的存在,但我想知道为什么这段代码没有达到预期的效果。 PPS:我知道未定义的行为,在清除后忘记访问,我只是想要一种有效的方式来立即释放内存,就像我删除常规指针时一样。
你知道你做错了事,你为什么对结果感到惊讶? – 2013-04-09 10:10:41
删除不会清除其内部数据。 – phoeagon 2013-04-09 10:11:08
你专注于错误的事情。请阅读我的其他评论。 – gonsuh 2013-04-09 10:24:42