Вот кодПочему эти точки уничтожены три раза?
#include <iostream>
#include <stdio.h>
using namespace std;
class Point {
private:
int x;
int y;
public:
Point(int x, int y) : x(x), y(y) {}
~Point() {
printf("Point destroyed: (%d, %d)\n", x, y);
}
};
class Square {
private:
Point upperleft;
Point lowerright;
public:
Square(int x1, int y1, int x2, int y2) : upperleft(x1, y1), lowerright(x2, y2) {}
Square(Point p1, Point p2) : upperleft(p1), lowerright(p2) {}
~Square() {
printf("Square destroyed.\n");
}
};
int main(int argc, char const* argv[])
{
Point p1(1, 2);
Point p2(3, 4);
Square s1(p1, p2);
return 0;
}
После компиляции (g++ x.cpp
) и бежать, я получил следующие результаты:
Point destroyed: (1, 2)
Point destroyed: (3, 4)
Square destroyed.
Point destroyed: (3, 4)
Point destroyed: (1, 2)
Point destroyed: (3, 4)
Point destroyed: (1, 2)
я ожидаю каждый пункт, чтобы быть уничтожены в два раза, но они уничтожены три раза вместо , Зачем?
Какой компилятор и какие варианты? –
p1 и p2 будут уничтожены, как и копии, сделанные при передаче их конструктору «Квадрат», а затем вторая пара копий, созданных при построении ваших данных из этих копий. – Simple
@JohnZwinck Plz см. В редакции. – qed