C++智能指针实现引用计数有必要另外再引入类吗?

caschaoxin 2013-04-11 08:35:55
C++智能指针实现引用计数有必要另外再引入类吗?
我是这样实现的

#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>

#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
#endif

class U_Ptr {
public:
U_Ptr(char *s = NULL):str(s) { count = new int(1);}
~U_Ptr()
{
if(--*count == 0) {
delete count;
delete str;
}
}
U_Ptr(const U_Ptr &orig):str(orig.str) {++(*orig.count); }
U_Ptr& operator=(const U_Ptr &rhs)
{
++*rhs.count;
if(--*count == 0) {
delete count;
delete str;
}
str = rhs.str;
count = rhs.count;
return *this;
}
void setstr(char *ip)
{
str = ip;
}
private:
int *count;
char *str;
};

int main()
{
{
U_Ptr a;
{
U_Ptr b(new char('b'));
a.setstr(new char('a'));
a = b;
}
}
_CrtDumpMemoryLeaks();
return 0 ;
}

一样也没有发生悬挂指针和内存泄漏问题呀,求牛人指教
...全文
313 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zh6335901 2013-04-12
  • 打赏
  • 举报
回复
你的引用计数在多线程下不安全
Star-light 2013-04-12
  • 打赏
  • 举报
回复
你现在不是写了一个新的智能指针类么。。。什么叫没引入类。。。 而且还是针对char类型的,不通用,给你个int怎么办? 智能指针能用stl的不要用别的,因为实现是很复杂的,不是一个引用计数就完了的事情 单单一个引用计数 一不能解决循环引用问题(weak_ptr) 二不能解决线程安全问题 三不能解决从一般指针获得shared_ptr问题(enable_shared_from_this) 四不能解决多态指针类型转换问题(dynamic_pointer_cast static_pointer_cast) 五不能通过特化解决指向数组的问题,(std::unique_ptr<int[]>)
赵4老师 2013-04-12
  • 打赏
  • 举报
回复
不要企图优雅的结束(因为这是不可能办到的) 而要在烂的不能再烂的摊子上也能重整河山!
caschaoxin 2013-04-11
  • 打赏
  • 举报
回复
自己顶一下~

64,637

社区成员

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

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