智能指针就是利用系统调用函数执行完后自动释放栈实现的,从而规避程序员忘记释放内存的风险。。。。简单的智能指针实现如下
// smart_ptr.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
template<class T>
class smart_ptr
{
private:
int *n_ptr;
T *ptr;
public:
smart_ptr(T* ptr):ptr(ptr)
{
if (!n_ptr)
{
try
{
n_ptr = new int(1);
}
catch (exception* e)
{
delete ptr;
ptr = nullptr;
n_ptr = nullptr;
exit(1);
}
}
}
~smart_ptr()
{
if (--(*n_ptr) == 0)
{
delete ptr;
delete n_ptr;
ptr = nullptr;
n_ptr = nullptr;
cout << "destructor the obj" << endl;
}
}
smart_ptr & operator = (const smart_ptr& rhs)
{
++(*rhs.n_ptr);
if (--(*n_ptr) == 0)
{
delete ptr;
delete n_ptr;
cout << "Left obj is deleted!" << endl;
}
cout << "do once copy" << endl;
ptr = rhs.ptr;
n_ptr = rhs.n_ptr;
return *this;
}
smart_ptr(const smart_ptr<T> &orig)
{
ptr = orig.ptr;
n_ptr = orig.n_ptr;
++(*n_ptr);
cout << "Copy constructor is called!:" << *n_ptr<< endl;
}
template<class T2>
friend ostream& operator<< (ostream& os, const smart_ptr<T2>& rhs);
};
template<class T2>
ostream& operator<< (ostream& os, const smart_ptr<T2>& rhs)
{
os << *rhs.ptr << endl;
return os;
}
int main()
{
smart_ptr<int> ptr(new int(4));
cout << ptr;
smart_ptr<int> ptr2(ptr);
return 0;
}