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

ilo*_*ahz 3 c++ pointers class delete-operator

我的意思是,如果我有一些类:

class A{
    int* pi;
};
*A pa;
Run Code Online (Sandbox Code Playgroud)

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

hmj*_*mjd 10

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

例如:

class A
{
public:
    // Constructor.
    A(int a_value) : pi(new int(a_value)) {}

    // Destructor.
    ~A() { delete pi; }

    // Copy constructor.
    A(const A& a_in): pi(new int(*a_in.pi)) {}

    // Assignment operator.
    A& operator=(const A& a_in)
    {
        if (this != &a_in)
        {
            *pi = *a_in.pi;
        }
        return *this;
    }
private:
    int* pi;
};
Run Code Online (Sandbox Code Playgroud)