作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
想象一下它的构造函数所在的简单类线段是来自类点的几个对象:
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 P1
和delete P2
。
此外,找出谁拥有 P1
和 P2
。如果它们属于类,则在析构函数中删除它们,但请注意,在对象被销毁后,您将无法在外部访问它们。
所以,例如:
Point* p1 = new Point;
Point* p2 = new Point;
{
LineSegment l(p1,p2);
}
delete p1;
delete p2;
如果您删除
析构函数中的指针将是非法的。
无论您选择哪个版本,请务必记录您的决定 - 即明确说明该类是否拥有指针的所有权。
如果您使用智能指针,您就不会遇到这个问题。
关于c++ - 前向声明和析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10911006/
我是一名优秀的程序员,十分优秀!