在 C++ 中引入 gc 后的对象初始化
这几天白天都在安排面试,其实还是有点累的。晚上就随便写点程序,好久没摸 C++ ,有点生疏。也算是娱乐一下吧。
主要工作其实是在 C 库的基础上做一个 C++ 的中间层。跟在 C 库的基础上做 lua 中间层差不太多。前几天加入了 gc 后,发现了一些有趣的用法。
比如对于构造对象。 C 的 api 中,如果创建一个对象失败,就会返回空指针。但是对于 C++ 就不一样了,new 是不应返回空指针的。书本上的推荐做法是在构造函数里抛异常。但是我又不太想进一步的引入异常机智,怎么办呢?
简单的方法是让 C++ 的封装类的构造函数什么都不干。btw, 我听 google 的 Mike Burrows 也讲过 popular C++ constructs can be bad for abstraction 。
然后加一个 init 函数来初始化这个对象,成功则返回 this 指针,失败则返回 NULL。
如果没有 gc 的时候,我需要这样做:
A *a = new A; if (!a->init()) { delete a; a = NULL; }
有了 gc 后很方便,只需要
A *a = (new A)->init();
嘿嘿,有 gc 还是方便很多呀。只是 new 的操作优先级让我有点不爽。
ps. 我知道即使没有 gc ,我也可以用很现代的 template 技术做到同样的事情。而且代码看起来更有品味。不过我感觉自己越来越老土了,写 C++ 也越来越 C Style 了。完全没有 10 多年前对 C++ 的火热激情。
Comments
Posted by: 李D少 | (15) July 30, 2012 05:17 PM
Posted by: kmplayer | (14) December 8, 2010 04:21 PM
Posted by: Imag2 | (13) March 19, 2010 04:46 PM
Posted by: kayaklee | (12) March 8, 2010 11:42 AM
Posted by: dudu | (11) March 4, 2010 05:47 PM
Posted by: 科士威 | (10) March 2, 2010 10:39 PM
Posted by: joshua | (9) March 1, 2010 05:02 PM
Posted by: Leo Jay | (8) February 26, 2010 05:49 PM
Posted by: cloud | (7) February 25, 2010 11:57 PM
Posted by: etreeser | (6) February 25, 2010 06:40 PM
Posted by: jason | (5) February 25, 2010 05:11 PM
Posted by: Anonymous | (4) February 25, 2010 01:38 AM
Posted by: 柒笑侠 | (3) February 24, 2010 10:46 PM
Posted by: Anonymous | (2) February 24, 2010 10:34 PM
Posted by: cmathser | (1) February 24, 2010 10:20 PM