关闭

C++/CLI 口水战,多位大师参与

标签: c++object编译器deleteaccesslist
4002人阅读 评论(3) 收藏 举报

原文地址

这个口水战中,Herb Sutter, Andrei Alexandrescu, Walter Bright, David Abrahams, Francis Glassborrow, P.J. Plauger等C++大牛都发表了长篇大论。值得细看。有空我将要把我的感想贴上来。
PS:这帮人真是能说啊,看死了我了。另,我不是女的。

感想1:updated 2006-4-4
Herb Sutter在一个回帖中举了一个例子说明GC的必要性
 T *p1 = new T;
  ...
  T *p2 = p1;
  ...
  delete p1; // 1: run ~T and put the storage back on the free list
  ...
  U *p3 = new U; // 2: could reuse the same storage
  // here, the void* representations of p1 and p3 might be the same
  ...
  p2->Foo(); // 3: oops, type safety violation
这个例子中出现的访问已经释放的对象的情况并不少见。如果p3重新被分配在p1的空间,那么很可能以后的对p2的访问不会出现任何access violation错误,但是事实上那里已经不是你认为应该是的东西了。这类型的bug在后期的调试中会带来很大问题,因为编译器和调试器并不能帮你找出问题,只能靠自己一行一行的看。
Herb也举出了一些类似的问题,包括accessing still-existing but destroyed objects (析构已经调用,但是空间未释放), accessing freed memory where an object used to be, and accessing a new object with a pointer to an old object that used to be in the same location。他认为解决这类型问题的唯一途径就是GC。

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:28113次
    • 积分:366
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:3篇
    • 译文:0篇
    • 评论:9条
    文章分类
    最新评论
    Assmbly Language
    Game Develop
    Offical Sites