Вам нужно определить деструктор для 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;
};