gpt4 book ai didi

c++ - 前向声明和析构函数

转载 作者:行者123 更新时间:2023-11-30 00:56:06 24 4
gpt4 key购买 nike

想象一下它的构造函数所在的简单类线段是来自类点的几个对象:

class Point ;

class LineSegment {
public:

LineSegment(Point* P1, Point* P2);
~LineSegment();
} ;

问题是,在析构函数中,我应该先删除点还是自动完成?换句话说,在cpp文件中,应该写入以下哪些内容:

LineSegment::~LineSegment()

LineSegment::~LineSegment(){
delete P1;
delete P2;
}

最佳答案

首先要注意

LineSegment::~LineSegment(){
~P1();
~P2();
}

无效。要删除,需要delete P1delete P2

此外,找出谁拥有 P1P2。如果它们属于类,则在析构函数中删除它们,但请注意,在对象被销毁后,您将无法在外部访问它们。

所以,例如:

Point* p1 = new Point;
Point* p2 = new Point;

{
LineSegment l(p1,p2);
}

delete p1;
delete p2;

如果您删除析构函数中的指针将是非法的。

无论您选择哪个版本,请务必记录您的决定 - 即明确说明该类是否拥有指针的所有权

如果您使用智能指针,您就不会遇到这个问题。

关于c++ - 前向声明和析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10911006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com