摘要:C++11 中新增加了智能指针来预防内存泄漏的问题,在 share_ptr 中主要是通过“引用计数机制”来实现的。我们今天也来自己实现一个简单的智能指针:

 // smartPointer.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <iostream>
#include<windows.h> using namespace std; class Person
{
public:
Person(){ count = ; };
~Person() { };
void inc(){ count++; }
void dec(){ count--; }
int getCount(){ return count; }
void printInfo() {
cout << "just a test function" << endl;
} private:
int count; // 增加类的计数成员,在执行智能指针对象的析构函数时,进行判断是否要 delete 这个对象
}; class smartPointer
{
public:
smartPointer(){ p = nullptr; };
smartPointer(Person *other); // 带参构造函数
smartPointer(smartPointer &other) { // 拷贝构造函数
p = other.p;
p->inc();
}
Person *operator->() { // 重载 ->
return p;
}
Person& operator*() { // 重载 *
return *p;
} ~smartPointer();
private:
Person *p;
}; smartPointer::smartPointer(Person *other) {
cout << "Person()" << endl;
p = other;
p->inc();
} smartPointer::~smartPointer()
{
cout << "~Person()" << endl;
if (p) {
p->dec();
if (p->getCount() == ) {
delete p;
p = nullptr;
}// if
}//if
} void test_func(smartPointer& other) {
smartPointer s = other;
s->printInfo();
} int _tmain(int argc, _TCHAR* argv[])
{
smartPointer sp = new Person(); // 调用带参构造函数( sp 对象中的指针 p 指向构造的 Person 对象)
(*sp).printInfo(); system("pause");
return ;
}

smartPointer

参考博客:http://www.cnblogs.com/xiehongfeng100/p/4645555.html

05-06 11:09