概念
智能指针不是一个指针,它其实是一个对象。它是通过C++的RAII机制实现的。主要是利用C++中对象在释放的时候,会自动调用析构函数这一特性。
所以,当智能指针对象释放的时候,在智能指针对象的析构函数中来释放其管理的内存资源。这样,开发人员就不需要手动去释放已经分配的内存空间。
C++17标准之后,C++标准中还有三种智能指针:shared_ptr、unique_ptr、weak_ptr。下面我们将一一介绍。
智能指针雏形
利用RAII机制实现一个智能指针雏形代码:
template
class SmallSmartPtr {
public:
explicit SmallSmartPtr(T* ptr = nullptr)
: ptr_(ptr)
{}
~SmallSmartPtr()
{
delete ptr_;
}
T* get() const { return ptr_; }
private:
T* ptr_;
};
测试代码:
class Test
{
public:
Test()
{
cout <"Test()" < }
~Test()
{
cout <"~Test()" < }
};
int main()
{
{
SmallSmartPtr t(new Test());
}//智能指针对象离开作用域,将会被销毁
system("pause");
}
测试结果: