自己实现了一个C++的智能指针。
基于Shared_ptr来实现,支持默认构造,拷贝构造,移动构造, 引用计数器,
注意智能指针中存放的指针地址一旦被一个智能指针对象托管以后,不要再直接拿此地址来初始化其他对象,否则会引发多次泄漏的问题。(所以还是要特别小心)
如果要初始化其他对象,请直接使用智能指针来进行初始化。(移动构造,拷贝构造,赋值等)
所以一旦决定采用智能指针来托管对象,代码中其他地方应该只出现使用此地址的代码,或者传递值给系统API
源代码如下:Clang 5.0 编译通过
#include <iostream>
#include <memory>
#include <string>
template <typename Object>
class SmartPointer
{
public:
SmartPointer(Object * p = nullptr)
: m_ptr(p),
m_pRefCnt(new size_t{})
{
if(p)
*m_pRefCnt = 1;
else
*m_pRefCnt = 0;
}
~SmartPointer()
{
releaseCount();
}
// copy constructor
SmartPointer(const SmartPointer & rhs)
{
if(this