C++运行超载,碰撞
问题描述:
为什么这段代码崩溃当我运行它C++运行超载,碰撞
ostream& operator<<(ostream& cout, Array<int> a) {
return cout;
}
这并不
ostream& operator<<(ostream& cout, Array<int>& a) {
return cout;
}
答
什么为Array<int>
拷贝构造函数做方案?看看What is The Rule of Three?的第一个答案是否解决了你的问题(即你的类在内部处理了一个指向资源的指针,但未能在它的拷贝构造函数中执行深层拷贝,导致两个实例删除相同的资源)。
答
压倒性的可能性是你的Array<int>
的拷贝构造函数或析构函数被搞砸了。除此之外,你还有一些严重的命名空间问题 - 你使用了命名空间std作为ostream,但随后调用了你的参数cout,这是与std :: cout的冲突。我很惊讶这个代码编译 - 你应该总是使用标准名称的std ::,因为否则只是不明确。
+1
没有冲突:参数默默地影响全局变量和成员变量。 – 2010-12-12 14:05:01
你如何运行它?你可以发布一个小背景吗?什么是阵列? – 2010-12-12 13:55:59
你必须显示什么是阵列!很可能你正在分配内存,并且你没有拷贝构造函数,并且析构函数会释放内存。 – AraK 2010-12-12 13:56:30