智能指针类的使用问题
智能指针的定义如下:
class U_Ptr
{
friend class HasPtr;
int *ip;
size_t use;
U_Ptr( int *p ): ip( p ), use( 1 ) { }
~U_Ptr()
{
delete ip;
}
};
class HasPtr
{
public:
HasPtr( int *p, int i ): ptr( new U_Ptr( p ) ), val( i ) { }
HasPtr( const HasPtr &orig ): ptr( orig.ptr ), val( orig.val )
{
++ptr->use;
}
~HasPtr()
{
if ( --ptr->use == 0 )
delete ptr;
}
private:
U_Ptr *ptr;
int val;
};
int main()智能指针 类
{
int obj = 0;
HasPtr ptr1( &obj, 42 );// 运行时错误???为什么??
return 0;
}
{
int obj = 0;
HasPtr ptr1( &obj, 42 );
}
上面一句作用域结束的时候,智能指针会根据传的地址,去删除该对象,你这里程序就会去delete &obj;
相当于干了这么件事情,删除栈区的内存,肯定是会报错了啊
改用这个就ok了
HasPtr ptr1( new int, 42 ); 这样才是真正使用了智能指针的功能,new 了个东东,不需要你手动去delete了