将对象插入到列表中,c ++

时间:2011-11-10 20:32:52

标签: c++ list

我正在尝试在包含几何数据的c ++中创建一个列表。该列表是三角形列表:

class Triangle
{
public:
Triangle(Point P1,  Point P2,  Point P3);
Triangle(const Triangle& T);
~Triangle() {delete e1; delete e2; delete e3;}



const Triangle operator=(const Triangle & T);

bool InCircle(Point & P);
int TriNumber() { return TriangleNumber;}
void SetTriNumber(int trinum) { TriangleNumber = trinum;}
Edge ReturnEdge(int i);
Point ReturnPoint(int i);





protected:
Point p1,p2,p3;
Edge *e1, *e2, *e3; 
int TriangleNumber;             
};

但是,当我尝试创建三角形列表时,我会使用以下行获得分段错误:

const Point p1(100.0, 100.0);
const Point p2(-100.0, 100.0);
const Point p3(0.0, -150.0);



Triangle TT(p1,p2,p3);

list<Triangle> trilist;
list<Triangle>::iterator iter;
iter = trilist.begin();
// the next line is causing all the problems:
trilist.insert(iter, TT);

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

请记住,STL容器会将您放入其中的对象的副本。 (参见Scott Meyers的“Effective STL”,第3项。)

如果您的对象没有正确实现复制,那么当您将它们放入容器时,最多会出现分段错误,最坏的情况则是细微的错误。 (正如迈耶斯所说,“复制,复制出来。这就是STL方式。”)

由于你的对象似乎暗示动态分配在某个地方进行,我猜想你的某个类的拷贝构造函数,赋值运算符或析构函数没有正确实现。

答案 1 :(得分:0)

根据您对复制构造函数和赋值运算符的实现,可能会多次删除边*e1, *e2, *e3

我们能否看到要确认的实施?