2010-12-01 21 views
0

我正在学习C++,我不清楚类的析构函数。例如:C++:删除公共和私人的所有声明是否正确?

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

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

那么,基本上删除公共和私人的每个声明都是正确的吗?

+12

绝对不是,你在学什么书? – 2010-12-01 11:24:18

回答

8

不,您只需要delete已使用new分配。简单的值类型如int s永远不需要删除。

如果您阶级都包括使用new或者通过构造函数或以后通过其他方法则析构函数通常应该动态分配的数据取消分配所有的,不管羯羊数据是公共的还是私有的。

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

+0

+1最后一点是有争议的,但这显然不是解决这个问题的帖子。 – 2010-12-01 13:59:38

2

您不能只删除ints指针。

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

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

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

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

析构函数可以做其他事情,而不仅仅是删除指针。例如,如果您的类在创建时已将自己附加到某种图形上,则析构函数可以自动从该图形中移除它自己。

2

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

0

不,只要删除一些在你的班级建造的指针。