背景:
在阅读有关智能指针的信息时,我遇到了以下 C++ 中智能指针的示例实现
template < typename T > class SP
{
private:
T* pData; // Generic pointer to be stored
public:
SP(T* pValue) : pData(pValue)
{
}
~SP()
{
delete pData;
}
T& operator* ()
{
return *pData;
}
T* operator-> ()
{
return pData;
}
};
class Person
{
int age;
char* pName;
public:
Person(): pName(0),age(0)
{
}
Person(char* pName, int age): pName(pName), age(age)
{
}
~Person()
{
}
void Display()
{
printf("Name = %s Age = %d \n", pName, age);
}
void Shout()
{
printf("Ooooooooooooooooo",);
}
};
void main()
{
SP<Person> p(new Person("Scott", 25));
p->Display();
// Dont need to delete Person pointer..
}
问题:
这个智能指针的好处是一旦超出范围就会删除 Person 类对象。但是那我们是否需要专门添加代码“delete p;”?在主函数中让智能指针类不会泄漏自己?
既然 Person 类也有析构函数,我们真的需要对 person 的对象调用 delete 吗?当 Person 对象超出范围时,将自动调用析构函数