我正在尝试以过剩的方式构建简单的画家(即点,线,圆...等)。每行必须具有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));
}

09-08 09:07