智能指针问题~~~~
请教:
智能指针,其的思想是不是为了记录类的实例或对象的个数。
一个独立的指针(智能指针)。
也是为了防止内存泄漏,方便的管理内存。大概是这意思么?
以下是简单的代码:
#include <iostream>
using namespace std;
//智能指针类
class B
{
private:
friend class A;
int *ip;
size_t use;
B(int *p):ip(p), use(0){}
~B()
{
cout<<"析构类B\n";
}
};
//--------------------------------
class A
{
private:
B *ptr;
int val;
public:
A(int *p, int i):ptr(new B(p)), val(i){++ptr->use;}
A(const A &a):ptr(new B(*a.ptr)),val(a.val)
{
++ptr->use;
}
A& operator = (const A &a)
{
ptr = new B(*a.ptr);
val = a.val;
++ptr->use;
return *this;
cout<<"operator\n";
}
~A()
{
if(ptr->use != 0)
{
delete ptr;
--ptr;
}
cout<<"析构类A\n";
}
};
int main(void)
{
int i = 1;
A a(&i, 2);
A f(a);
a = f;
return false;
}
大概是这意思么?? 智能指针 类 内存
[解决办法]
//测试智能指针(一种表现行为是指针的智能型对象)
namespace TestSmartPoint
{
template<class T>
class CountedPtr
{
public:
explicit CountedPtr(T *p = NULL):ptr(p), count(new int(1)) {}
CountedPtr(const CountedPtr<T> &p):ptr(p.ptr), count(p.count)
{
++(*count);
}
~CountedPtr()
{
dispose();
}
CountedPtr<T>& operator= (const CountedPtr<T> &p)
{
if (this != &p)
{
dispose();
ptr = p.ptr;
count = p.count;
++(*ptr);
}
return *this;
}
T& operator*()
{
return *ptr;
}
T* operator->()
{
return ptr;
}
private:
T *ptr;
int *count;
void dispose()
{
if (--(*count) == 0)
{
delete count;
count = NULL;
delete ptr;
ptr = NULL;
}
}
};
}
void TestMySmartPoint()
{
using namespace TestSmartPoint;
CountedPtr<int> pInt(new int(11));
CountedPtr<int> pInt2(pInt);
}