如何删除具有指针成员的类的指针?

时间:2012-02-29 11:35:48

标签: c++ class pointers delete-operator

我的意思是,如果我有类似的课程:

class A{
    int* pi;
};
*A pa;

当我致电delete pa时,pi会被删除吗?

3 个答案:

答案 0 :(得分:10)

您需要将析构函数定义为delete pi;。此外,您还需要定义复制构造函数和赋值运算符,否则在复制A的实例时,两个对象将指向相同的int,当{的其中一个实例将被删除时{1}}被破坏,而A的另一个实例带有悬空指针。

例如:

A

答案 1 :(得分:1)

你应该实现一个析构函数~A(),它负责清理A的东西。之后,在delete类型的指针上调用A将清除所有内容。

答案 2 :(得分:0)

您需要编写析构函数来删除所有指针类型成员。类似的东西:

class A
{
    int *pi;
  public:
    ~A(){delete pi;}
};

您需要确保构造函数为pi分配值(至少为NULL)。和@hmjd的答案一样,您需要实现或隐藏复制构造函数和赋值运算符。在这里寻找三个规则: http://en.wikipedia.org/wiki/Rule_of_three_%28C%2B%2B_programming%29