STL容器放入的对象能否可以动态分配内存,若可以,怎么释放它呢?
见下面这个程序
在VC6.0 Release版本不报错,Debug版本报错
在linux下使用g++编译时,报错
见下面这个程序
在VC6.0 Release版本不报错,Debug版本报错
在linux下使用g++编译时,报错
#include <stdio.h> #include <queue> class Data { public: Data() { p = new char; } ~Data() { if(p != NULL) { delete p; p = NULL; } } private: char *p; }; int main(int argc, char* argv[]) { printf("Hello World!\n"); std::queue<Data> que; Data d; que.push(d); que.pop(); return 0; }
解决方案
45
没有重写考贝构造函数和operator=。所以que.push(d); 只做了浅拷贝(p只拷贝了地址),同一段内存被释放多次。
5
楼上正解
