#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string>
#include <map>
#include <vector>
#include <string>
#include <string.h>
#include <map>
#include <list>
class test_struct
{
public:
test_struct(){
printf("===test_struct===\n");
a= 1;
b= 2;
//c= new char[3];
}
//test_struct(test_struct& copy){
// a = copy.a;
// b = copy.b;
//c = new char[3];
// printf("===copy test_struct===\n");
//memcpy(c, copy.c, 3);
// }
~test_struct(){
printf("===~test_struct===\n");
//if(c)delete c;
}
int a;
int b;
//char* c;
};
typedef test_struct test_struct_t;
int main(int argc, char *argv[]) {
#if 0
test_struct_t* a = new test_struct_t;
test_struct_t* b = new test_struct_t;
std::map<int, test_struct_t*> struct_map;
struct_map.insert(make_pair(1,a));
struct_map.insert(make_pair(2,b));
for(std::map<int, test_struct_t*>::iterator it = struct_map.begin(); it != struct_map.end(); it++){
test_struct_t* tmp = (it->second);
delete tmp;
struct_map.erase(it);
}
struct_map.erase(struct_map.begin(), struct_map.end());
printf("map size: %d\n", struct_map.size());
#else
test_struct_t a;
test_struct_t b;
std::map<int, test_struct_t> struct_map;
//struct_map.insert(make_pair(1, test_struct_t()));
//struct_map.insert(make_pair(2, test_struct_t()));
struct_map.insert(make_pair(3, a));
struct_map.insert(make_pair(4, b));
#endif
struct_map.clear();
sleep(6);
printf("main end\n");
return 0;
}
C++ STL 如果元素是指针是需要手动释放的,这个都是知道的。如果是非指针元素,那么清理元素空间时(自动离开有效作用域)如果元素有析构函数会自动调用析构的, 所以如果非指针元素里有指针要记得在析构里进行释放。MAP清理完元素后还需要清理自身占用的STL内存。如果元素是非指针 元素类型,那么元素里面不要有裸指针否则出现 浅拷贝问题 (或者实现一个拷贝构造函数实现深拷贝),最好都替换成容器。