c++ - C++删除静态对象的方法

标签 c++

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

关于c++ - C++删除静态对象的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27211137/

相关文章:

c++ - 使用 Vectors 创建对象时如何调用析构函数

c++ - 带4K显示屏的QT布局输出

c++ - 编写简单的 C++ 测试

c++ - 创建一个像工作区一样的油漆并能够移动它们

c++ - 如何使用libcurl发布数据(包括换行符)(适用于Influxdb)?

包含自身映射的 C++ 结构

c++ - 隐式构造函数转换的编译器优化

C++ 比奇数大

c++ - 如何在 C++ 程序中查看 gdb 中的 vtable?

c++ - 从基类转换为派生类