请考虑以下代码:
int main() {
vector<polygon*> polygonVec;
polygonVec.push_back(new triangle(2,3,1,2,-1,-4, "triangle 1"));
polygon *tempPolygon;
tempPolygon = new rectangle(1,2,3,4,5,6,7,8, "rectangle 1");
polygonVec.push_back(tempPolygon);
for(vector<polygon*>::iterator itr = polygonVec.begin();
itr != polygonVec.end();
itr++)
{
cout<<*itr<<endl;
}
for(vector<polygon*>::iterator itr = polygonVec.begin();
itr != polygonVec.end();
itr++)
{
delete *itr;
}
polygonVec.clear();
它按预期工作(即打印&#34; 1 a \ n2 b ...&#34;)在没有优化的情况下进行编译,但是在使用-O2编译时会出现段错误或产生垃圾(同时使用clang-3.6) .0和gcc-4.9.2,提升1.56.0)我不知道是什么错误。
此外,当删除IntCharIterator包装器时,代码按预期使用优化级别。
有谁知道这里发生了什么?