我的意思是,如果我有这样的课程:
class A{
int* pi;
};
*A pa;
当我打电话时delete pa
, will pi
被删除?
您需要定义一个析构函数来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;
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)