Представьте себе простой сегмент класса строки, которые это конструктор являются несколько объектов с точки класса:Переслать объявление и деструкторы
class Point ;
class LineSegment {
public:
LineSegment(Point* P1, Point* P2);
~LineSegment();
} ;
Вопрос заключается в том, в деструкторе, я должен удалить пункты первой или это будет делать автоматически? На другими словами, в файле CPP, какие из следующих должно быть написано:
LineSegment::~LineSegment()
или
LineSegment::~LineSegment(){
delete P1;
delete P2;
}
Первый тоже будет работать. Это просто зависит от того, что вы хотите. Если «Point's» принадлежит кому-то другому (например, «std :: vector»), вы получите крах «позже не понимаете, почему он должен работать». Объявление класса не отображает 'Point' как членов класса, поэтому ... – Damon
@Damon мы можем предположить, что они являются членами, и он просто их покинул. Как еще он мог называть их деструктором? –
@LuchianGrigore: Хороший вопрос об объявлении. Хотя, конечно, это по-прежнему не обязательно означает, что класс фактически владеет указанными объектами «Point» (и, следовательно, им разрешено их удалять). Имея «точки» и «линии», очень эффективный и эффективный подход (подумайте об их трансформации, а не просто о распределении) заключается в том, чтобы хранить точки в массиве или векторе и ссылаться на них из объектов линии (не владея ими). – Damon