引用计数错在哪里?

原创 2006年06月01日 17:49:00

刚才看云风BLOG中《对象和资源的管理》(Trackback地址:http://blog.codingnow.com/mt/mt-tb.cgi/140),颇有不同意见。

首先,C++不是C#不是Java,如果非要在C++里专门开一个线程来搞GC,那不如不用C++。C++程序员可以精确控制对象释放的时机,这正是C++的长处,比方说,我有一个Socket对象,我可以保证在析构的时候就Close这个套接字,但在C#里,很痛苦地不能这么做,因为鬼才知道这个对象什么时候才销毁。

第二,怕忘记减少引用计数吗?文中自己也承认C++的语法可以完美地让你在引用一个对象时,自动递增计数,而在不需要它的时候递减,即然有这么好的语法,为什么不用呢?难道编译器会比程序员(人)更易犯错误吗?

第三,原文中说“可以在主线程中安排一个定期时间,扫描所有对象,把需要删除的对象删除。而平时的删除,只是做一个简单的 mark 操作”,那么,谁来做这个mark操作,比方说,我在一个stl容器中放了一个对象的指针,在该stl容器被销毁的时候,它敢mark吗?它如何知道没有人在引用这个对象呢?这个mark和delete又有什么区别呢?

第四,原文中似乎没有地方能证明出“靠编译器(自动)生成的代码来保证引用计数正确”这种做法的不合理性,仅仅是说编译器隐式地生成了一些代码(目标代码多了)。这个是理由吗?现代语言要做的就是让编译器完成更多的事情,让程序员少犯错。难道相比之下,我们宁原愿意让源代码量增加(且易出错)吗?想起一份统计文档,说Perl的一行代码相当于6行C代码所能干的事情,而一行C++代码的大约相当于2.5行C代码,也就是说,越是高级的语言,它的源码量就越少,这是天经地义的,至少说他会生成多少目标代码,这个不应该是考虑的事情吧,而且C++生成的代码的效率很接近C,根本不会因为有了构造和析构就让我们的服务程序动弹不得。

第五,用一个线程来定期扫描所有对象,无论从空间还是时间上都是浪费,如果一个对象自己能记住自己被引用了多少次,它就没有必要让另一个管理器来管理它。

那么,引用计数错在哪里?

携程错在哪里?

先转一个段子"我理解的携程事件":“你偷我内衣这事被别人知道了。”携程:,“我们已经把漏洞堵上了,别人不会在知道了,这内衣放我们这也是安全的,如果破了我们会给你买新的…… ”“别废话,我就想知道你为什...
  • u012214952
  • u012214952
  • 2014年03月24日 15:36
  • 324

错在哪里?

有人批评形式逻辑不够辩证,金岳霖先生说“你批评的对,因为你批评形式逻辑的话句句都符合形式逻辑!”可见逻辑的尊严与地位之丝毫不可撼动。    近来看到一篇英文小说,一学法律的大学生看中了他好友的女朋友,...
  • xiongzk
  • xiongzk
  • 2009年04月03日 14:57
  • 315

错在哪里

#include "stdafx.h" int main(int argc, char* argv[]) { int array[]={0,1,2,3,4,5,6,7,8,9}; int i=0; ...
  • TopicDev
  • TopicDev
  • 2014年01月13日 10:35
  • 541

reference count(引用计数)

稍微总结了下引用计数以及它的实际应用
  • keyouan2008
  • keyouan2008
  • 2010年07月30日 11:00
  • 2352

这个语法分析器错在哪里?

#includeusing namespace std;#define MAXSIZE 100typedef struct{ char *base; char *top; int size;}sqst...
  • secondtonone1
  • secondtonone1
  • 2010年11月20日 17:23
  • 373

到底错在哪里呢?

// opencv_test02.cpp : 定义控制台应用程序的入口点。 // #include"stdafx.h" #include "stdafx.h" #include #include ...
  • xxyy888
  • xxyy888
  • 2013年04月22日 18:09
  • 869

郁闷,不知道错在哪里

#include#include#define max 20typedef struct tnode{ char data;  struct tnode *lchild,*rchild;}BTNode...
  • tcm441224375
  • tcm441224375
  • 2009年05月13日 14:17
  • 165

引用计数法

最近在看一本书,挺好的,推荐给大家,博客只是个人摘录笔记,喜欢的可以买这本书看下~~...
  • njys1
  • njys1
  • 2016年12月17日 18:55
  • 243

由深拷贝与浅拷贝引发的引用计数、写时拷贝技术

一、理解深拷贝和浅拷贝: #include using namespace std; class String { public: String(const char *str = "") {...
  • wjxxaut
  • wjxxaut
  • 2016年08月13日 21:14
  • 331

int main(int argc, char* argv[])和int _tmain(int argc, _TCHAR* argv[])区别

用过C的人都知道每一个C的程序都会有一个main(),但有时看别人写的程序发现主函数不是int main(),而是int _tmain(),而且头文件也不是而是,会困惑吧? 一起来看看他们有...
  • ywhputx0802
  • ywhputx0802
  • 2014年07月19日 16:42
  • 857
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:引用计数错在哪里?
举报原因:
原因补充:

(最多只允许输入30个字)