<分区>
在 link 中使用示例,但改为使用 char *
和 vector
:
#include <vector>
using namespace std;
class Test{
char *myArray;
public:
Test(){
myArray = new char[10];
}
~Test(){
delete[] myArray;
}
};
int main(){
vector<Test> q; // line 1
Test t; // line 2
q.push_back(t);
}
这会导致双重释放或损坏错误。但是,如果在第 1 行之前运行第 2 行,例如:
Test t;
vector<Test> q;
然后它运行正常。这是为什么?
在 Xubuntu 12.04 g++ 4.6.3 上测试。
更新:
这不是重复的问题。我知道需要一个复制构造函数和一个赋值运算符(它已经在上面的示例代码所在的链接中得到了回答)。但是,像原链接中那样使用int *
或queue
,但交换第1行和第2行,仍然有错误。仅使用char *
,和vector
交换第1 行和第2 行不会导致错误。我的问题是为什么是这种特殊情况?任何人都可以在你们的平台上查看吗?