我正在学习C ++,我不清楚类的析构函数。例如:
class A:
{
public:
int valueA;
private:
int valueB;
};
A:~A()
{
delete valueA;
delete valueB;
}
那么,基本上删除公共和私有中的每个声明是否正确?
答案 0 :(得分:8)
不,您只需delete
使用new
分配的内容。像int
这样的简单值类型永远不需要删除。
如果您的类 包含由构造函数或稍后通过其他方法使用new
动态分配的数据,则析构函数通常应该取消分配所有数据,无论是否数据是公开的还是私人的。
我可能会补充说,公开显示动态分配的指针成员可能不是最好的设计。
答案 1 :(得分:2)
你不能只删除指针。
你的析构函数可以访问私有成员,但是如果它们实际上是指针(以及公共指针),它可以删除它们。
也只是因为你的类的一个成员是一个指针,它并不意味着你的析构函数是要删除它。 C ++有一个“所有权”的概念。所有者通常但并不总是与创建者相同(称为new)。
请注意,对于使用新T [x]的数组,必须使用delete []。
有些自动对象会为您调用删除。这些被称为智能指针,您应该在大多数时间使用它们而不是手动执行删除。
析构函数可以执行除删除指针之外的其他操作。例如,如果您的类在创建时将自己附加到某种图形上,那么析构函数可以自动从该图形中删除它。
答案 2 :(得分:2)
delete
仅用于指针。在一般意义上,是的,您应该删除您拥有的内存的所有公共变量和私有变量(您已在类中保留,并且您有责任删除)。
答案 3 :(得分:0)
不,只需删除您班级中构建的一些指针。