C ++:删除公共和私有中的所有声明是否正确?

时间:2010-12-01 11:23:12

标签: c++

我正在学习C ++,我不清楚类的析构函数。例如:

class A:
{
  public:
    int valueA;
  private:
    int valueB;
};

A:~A()
{
  delete valueA;
  delete valueB;
}

那么,基本上删除公共和私有中的每个声明是否正确?

4 个答案:

答案 0 :(得分:8)

不,您只需delete使用new分配的内容。像int这样的简单值类型永远不需要删除。

如果您的类 包含由构造函数或稍后通过其他方法使用new动态分配的数据,则析构函数通常应该取消分配所有数据,无论是否数据是公开的还是私人的。

我可能会补充说,公开显示动态分配的指针成员可能不是最好的设计。

答案 1 :(得分:2)

你不能只删除指针。

你的析构函数可以访问私有成员,但是如果它们实际上是指针(以及公共指针),它可以删除它们。

也只是因为你的类的一个成员是一个指针,它并不意味着你的析构函数是要删除它。 C ++有一个“所有权”的概念。所有者通常但并不总是与创建者相同(称为new)。

请注意,对于使用新T [x]的数组,必须使用delete []。

有些自动对象会为您调用删除。这些被称为智能指针,您应该在大多数时间使用它们而不是手动执行删除。

析构函数可以执行除删除指针之外的其他操作。例如,如果您的类在创建时将自己附加到某种图形上,那么析构函数可以自动从该图形中删除它。

答案 2 :(得分:2)

delete仅用于指针。在一般意义上,是的,您应该删除您拥有的内存的所有公共变量和私有变量(您已在类中保留,并且您有责任删除)。

答案 3 :(得分:0)

不,只需删除您班级中构建的一些指针。