所以我不得不为 Udemy 的一门课程做这个练习,我完成了它。但是在 GDB 中我自己的机器上运行时,我在标题中得到了上面的错误。我尝试检查破坏前后点的指针的值,并且 start 的值在 line 和 copy 的析构函数上表现得很奇怪(都在 main 的范围内)在第一次调用我无法访问的析构函数时start 和销毁后 start->x 的值(它通常打印)为零(预期),但在第二个析构函数处,应该为 3 的 start->x 的值也为零。但是我的代码中没有任何内容告诉我(它可能会告诉其他人)它应该这样做。我就是想不通
struct Point
{
int x{ 0 }, y{ 0 };
Point(){}
Point(const int x, const int y) : x{x}, y{y} {}
};
struct Line
{
Point *start, *end;
Line(Point* const start, Point* const end)
: start(start), end(end)
{
}
Line()
{
}
~Line()
{
delete start;
delete end;
}
Line& deep_copy() const
{
Point *cstart=new Point;
Point *cend=new Point;
(*cstart)=*start;
(*cend)=*end;
static Line copy{cstart, cend};
return copy;
}
};
#include <iostream>
using namespace std;
int main (){
Point *start= new Point(1,2);
Point *end = new Point(3,4);
Line line{start, end}, copy;
cout << line.start->x <<endl<< line.start->y <<endl<< line.end->x <<endl<< line.end->y <<endl;
copy = line.deep_copy();
cout << copy.start->x <<endl<< copy.start->y <<endl<< copy.end->x <<endl<< copy.end->y <<endl;
return 0;
}