我正在尝试以过剩的方式构建简单的画家(即点,线,圆...等)。每行必须具有Point
类型的两个点,因此,每当用户输入鼠标的左键时,就会执行所选命令。为了画一条线,我需要跟踪用户单击鼠标的次数,所以这就是我要做的
if ( command == 1 ){ // drawing a line
static int count(0); // track click no.
static std::vector<Point> p;
//static Point startPoint(mouseX, mouseY);
p.push_back(Point(mouseX, mouseY));
if ( count == 1 ){
Point endPoint(mouseX, mouseY);
Point startPoint = p[0];
shapes->addLine(Line(startPoint, endPoint));
count = 0;
p.clear();
}else{
count++;
}
我仅使用
std::vector
来使用clear()
,以便可以删除需要静态的startPoint
。我的问题是,有没有一种方法可以通过使用vector
来破坏对象而又不增加行数?我试图给析构函数打电话,但没有帮助。 最佳答案
您可以使用unique_ptr<Point>
。然后,您可以使用reset
设置或销毁Point
:
static std::unique_ptr<Point> startPoint;
if (startPoint){
Point endPoint(mouseX, mouseY);
shapes->addLine({*startPoint, endPoint});
startPoint.reset();
} else {
startPoint.reset(new Point(mouseX, mouseY));
}