我的意思是,如果我有类似的课程:
class A{
int* pi;
};
*A pa;
当我致电delete pa
时,pi
会被删除吗?
答案 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