Code Bye

std::queue放入的对象怎么释放动态分配的内存,求帮忙

STL容器放入的对象能否可以动态分配内存,若可以,怎么释放它呢?
见下面这个程序
在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

楼上正解

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明std::queue放入的对象怎么释放动态分配的内存,求帮忙