在C++中引入GC后的对象初始化

发表于:2020-4-24 09:45

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:crane_practice    来源:SegmentFault博客

  这几天白天都在安排面试,其实还是有点累的。晚上就随便写点程序,好久没摸 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++ 的火热激情。

本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号