63,594
社区成员




《C++Primer》中关于讲到用指针计数的方法实现智能指针,书上讲解较为详细,但是当我把例子用到VC6.0和VC2005上时,编译通过可是不能运行,一运行就弹出错误框。小生实在不解错在哪里,请前辈高人指点!以下是代码:
#include "stdafx.h"
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& operator = (const HasPtr&);
~HasPtr( ) {if (--ptr -> use == 0) delete ptr;}
private:
U_Ptr *ptr;
int val;
};
int _tmain(int argc, _TCHAR* argv[])
{
int obj = 2;
HasPtr p1(&obj, 42);
HasPtr P2(p1);
return 0;
}
问题点数:20 回复次数:3 显示所有回复显示星级回复显示楼主回复 修改 删除 举报 引用 回复
加为好友
发送私信
在线聊天
dizuo
Submariner
等级:
发表于:2008-03-14 16:03:251楼 得分:0
你实际上就没有new 啊
修改 删除 举报 引用 回复
加为好友
发送私信
在线聊天
dizuo
Submariner
等级:
发表于:2008-03-14 16:05:052楼 得分:20
C/C++ codeint _tmain(int argc, _TCHAR* argv[])
{
int* obj = new int(2); //只有new以后才可以执行delete;
HasPtr p1(obj, 42);
HasPtr P2(p1);
return 0;
}
修改 删除 举报 引用 回复
加为好友
发送私信
在线聊天
max007super
菩提小鸟
等级:
发表于:2008-03-14 16:30:543楼 得分:0
呵呵谢谢Submariner老大!
问题解决了。