auto_ptr 中reset函数的问题

pubb1986 2007-03-23 10:05:33
在vs2003中使用 auto_ptr 中reset函数 没有问题

将代码转换到vc6下后:

class CDimStyle //某类


auto_ptr<CDimStyle> DimStylePtr;
CDimStyle *pDimStyle=m_DimStylePList.Get(nID);
DimStylePtr.reset(pDimStyle);

编译提示错误:error C2039: 'reset' : is not a member of 'auto_ptr<class CDimStyle>'

我查了下先前的资料说用: DimStylePtr.get()->assign(pDimStyle);可以解决

但我改了后 通过get()返回CDimStyle 类型 但未找到assign方法

CDimStyle 继承于自己写的CObj类 CObj继承与CObject

希望前辈们帮下忙 万分谢谢 在线等
...全文
526 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fish_yutao 2010-11-15
  • 打赏
  • 举报
回复
自己在vc6.o里面添加reset函数
具体函数去2003里面抄
pubb1986 2007-03-23
  • 打赏
  • 举报
回复
非常感谢 deng2000 的帮助 问题已经解决
deng2000 2007-03-23
  • 打赏
  • 举报
回复
是吗? 不能通过编译还是运行出错? 如果编译错的话,把错误信息贴出来看看.
如果是运行错的话,我觉得你在这儿就不应该使用auto_ptr.
在auto_ptr获得一个指针后,它就负责在最后调用此指针的析构函数.我不知道m_DimStylePList的类型是STL list还是你自己写的一个list类, 一般情况下list本身会负责释放所有成员. 因此你把其一个成员(m_DimStylePList.Get(nID))赋给auto_ptr很可能导致这个指针被删除两次!
pubb1986 2007-03-23
  • 打赏
  • 举报
回复
问题还是未能解决呀= =!

deng2000() 的方法不行的

晨星 2007-03-23
  • 打赏
  • 举报
回复
偶比较同意taodm(taodm),虽然如果是正版的,VC6会便宜点。
deng2000 2007-03-23
  • 打赏
  • 举报
回复
下面这一行语句应该能达到你需要的结果,而且肯定能通过VC6编译:

auto_ptr<CDimStyle> DimStylePtr(m_DimStylePList.Get(nID));

当然,它没有声明变量pDimStyle,但我想在你程序中应该不会再使用pDimStyle了吧(否则要DimStylePtr干什么,呵呵)
pubb1986 2007-03-23
  • 打赏
  • 举报
回复
那在VC6下该怎么样才能解决这一问题呢?
taodm 2007-03-23
  • 打赏
  • 举报
回复
不要使用VC6尝试C++的特性。扔了VC6吧
pubb1986 2007-03-23
  • 打赏
  • 举报
回复
DimStylePtr.get()->assign(pDimStyle);

DimStylePtr.assign(pDimStyle);

都不行的 DimStylePtr下面的方法 就get(),release(),还有些操作符重载的
晨星 2007-03-23
  • 打赏
  • 举报
回复
既然2003没问题,那就比较难说了,因为VC6对标准的支持本来也不好。

DimStylePtr.get()->assign(pDimStyle);?
这个不对吧,是不是:
DimStylePtr.assign(pDimStyle);?

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧